如何替换我的视图模型并使用 DTO 返回视图?

时间:2021-04-03 21:45:21

标签: c# asp.net asp.net-mvc entity-framework automapper

我是 MVC、EF 和 Automapper 的新手。

我制作了一个 dto,它基本上从其他实体中获取属性。

现在,我想使用我下载并注册但不知道如何使用的 AutoMapper 将 dto 映射到那些类。

public BooksReadersDTO GetAllBooksReaders(int pageNo, int pageSize) {

        BooksReadersDTO booksReadersViewModel = new BooksReadersDTO();
        List<BooksReadersDTO> ListBooksReaders = new List<BooksReadersDTO>();
        int rowNo = (pageNo - 1) * pageSize;

        using (BooksDbContext context = new BooksDbContext())
        {
            booksReadersViewModel.TotalRecords = context.Books.Count();

            var data = (from nt in context.BooksReaders
                        join n in context.Books
                        on nt.BooksID equals n.BooksID
                        join t in context.Readers
                        on nt.TagID equals t.TagID
                        select new BooksReadersDTO { BooksID = n.BooksID, IsPublished = n.IsPublished, BooksTitle = n.BooksTitle, TagName = t.TagName })
                        .ToList();
                                                         
            ListBooksReaders=data.OrderBy(x => x.BooksID).Skip(rowNo)
                            .Take(pageSize).ToList();
            booksReadersViewModel.ListBooksReaders = ListBooksReaders;

            return booksReadersViewModel;
        }

    }

现在在这段代码中,我相信这部分

select new BooksReadersDTO { BooksID = n.BooksID, IsPublished = n.IsPublished, BooksTitle = n.BooksTitle, TagName = t.TagName })
                           

可以用 AutoMapper 替换,但不知道如何替换。

namespace BooksReadersApp.App_Start
{
    public class MapperProfile: Profile
    {
        public MapperProfile() 
        {
            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap<Books, BooksReadersDTO>();
                cfg.CreateMap<Readers, BooksReadersDTO>();
                cfg.CreateMap<BooksReaders, BooksReadersDTO>
            });
        }
    }
}

并在 global.ascx 中的应用程序启动文件中对其进行初始化。

如何使用它,因为我想将 DTO 返回到视图而不是 ViewModel。

public class HomeController : Controller
    {
        public ActionResult Index(int page = 1)
        {
            int pageSize = 10;
            BooksReadersMethods BooksReadersMethods = new BooksReadersMethods();
           
            BooksReadersDTO BooksReadersViewModel = BooksReadersMethods.GetAllBooksReaders(page, pageSize);
            BooksReadersViewModel.Pager = new Pager(BooksReadersViewModel.TotalRecords, page);
            BooksReadersViewModel.Pager.CurrentPage = page;
            return View(BooksReadersViewModel);
        }

1 个答案:

答案 0 :(得分:0)

无需 AutoMapper 即可映射您的类型。这真的不需要太多努力,而且您可以保持编译时安全。