【问题标题】:How do I replace my view model and use DTO to return to the view?如何替换我的视图模型并使用 DTO 返回视图?
【发布时间】:2021-06-30 07:39:02
【问题描述】:

我是 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);
        }

【问题讨论】:

  • 任何帮助将不胜感激,因为它已经 12 小时了,我仍在寻找修复它但无法解决。
  • 你能展示你的观点吗?你需要一个映射器做什么?
  • @Sergey:在我看来,我只有 1 个 html 表,它是通过循环从动作视图模型返回的列表填充的。
  • 我知道可以使用 viewmodel 来完成,但我想使用 dto 和 automapper 来完成。
  • 真的,这让我发疯了。

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


【解决方案1】:

在没有 AutoMapper 的情况下映射您的类型。它真的不需要太多的努力,而且你保持编译时的安全。

【讨论】:

  • 嗨。这是一个要求,所以我需要。请
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多