我被告知在下面的代码中使用了automapper。由于太长而无法解决的原因,我无法澄清。我应该将什么对象映射到哪个对象?我没有看到“源”对象,因为源是数据库...
非常感谢有关如何使用automapper执行此操作的任何帮助。注意,实际的字段是无关紧要的,我需要一般概念的帮助。我确实理解了从一个对象映射到另一个对象时映射的工作原理。
public IQueryable<Object> ReturnDetailedSummaries(long orgId)
{
var summaries = from s in db.ReportSummaries
where s.OrganizationId == orgId
select new SummaryViewModel
{
Id = s.Id,
Name = s.Name,
AuditLocationId = s.AuditLocationId,
AuditLocationName = s.Location.Name,
CreatedOn = s.CreatedOn,
CreatedById = s.CreatedById,
CreatedByName = s.User.Name,
OfficeId = s.OfficeId,
OfficeName = s.Office.Name,
OrganizationId = s.OrganizationId,
OrganizationName = s.Organization.Name,
IsCompleted = s.IsCompleted,
isHidden = s.isHidden,
numberOfItemsInAuditLocations = s.numberOfItemsInAuditLocations,
numberOfLocationsScanned = s.numberOfLocationsScanned,
numberOfItemsScanned = s.numberOfItemsScanned,
numberofDiscrepanciesFound = s.numberofDiscrepanciesFound
};
return summaries;
}
答案 0 :(得分:3)
这是一个方便和节省时间,特别是如果您在翻译层之间使用一对一命名。这是我如何使用它。
单项
public Domain.Data.User GetUserByUserName(string userName)
{
Mapper.CreateMap<User, Domain.Data.User>();
return (
from s in _dataContext.Users
where s.UserName==userName
select Mapper.Map<User, Domain.Data.User>(s)
).SingleOrDefault();
}
多件商品
public List<Domain.Data.User> GetUsersByProvider(int providerID)
{
Mapper.CreateMap<User, Domain.Data.User>();
return (
from s in _dataContext.Users
where s.ProviderID== providerID
select Mapper.Map<User, Domain.Data.User>(s)
).ToList();
}
答案 1 :(得分:2)
看起来你已经有了模特? SummaryViewModel?
如果这不是DTO,那么大概是你想做的事:
Mapper.CreateMap<SummaryViewModel, SummaryViewModelDto>();
SummaryViewModelDto summaryViewModelDto =
Mapper.Map<SummaryViewModel, SummaryViewModelDto>(summaryViewModel);
AutoMapper会将字段从一个对象复制到另一个对象,以免您必须手动完成所有操作。
请参阅https://github.com/AutoMapper/AutoMapper/wiki/Getting-started
答案 2 :(得分:1)
来源是您的实体类ReportSummary
,目标是SummaryViewModel
:
Mapper.CreateMap<ReportSummary, SummaryViewModel>();
将AutoMapper
与IQueryable
数据源结合使用的最佳方式是Project.To
API:
var summaries = db.ReportSummaries.Where(s => s.OrganizationId == orgId)
.Project().To<SummaryViewModel>();
Project.To
将目标模型中的属性直接转换为生成的SQL中的选定列。
Mapper.Map
仅适用于内存中的集合,因此您只能在首次从数据库中获取完整的ReportSummary
对象时使用它。 (在这种情况下,可能没有太大的区别,但在其他情况下,它可能是实质性的)。