我是 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);
}
答案 0 :(得分:0)
无需 AutoMapper 即可映射您的类型。这真的不需要太多努力,而且您可以保持编译时安全。