我有一个具有ProjectId
属性的InvoiceInputModel
,这是对Project
实体的引用。理想情况下,我希望AutoMapper能够从InvoiceInputModel
映射整个Invoice
实体,如下所示:
public class InvoiceInputModel
{
public Guid Id { get; set; }
public DateTime Date { get; set; }
public string Reference { get; set; }
public Guid ProjectId { get; set; }
}
显然下面是不好的:
Mapper.CreateMap<InvoiceInputModel, Invoice>()
.ForMember(src => src.Project, opt => opt.MapFrom(
dest => _unitOfWork.CurrentSession.Get<Project>(dest.ProjectId)
)
);
我如何告诉AutoMapper, invoice.Project
应该映射到基于InvoiceInputModel
的ProjectId
属性的Project
实体,同时保持松耦合?
发票/编辑在我的InvoiceController
:
[HttpPost]
[Authorize]
public ActionResult Edit(InvoiceInputModel invoiceInputModel)
{
var invoice = _unitOfWork.CurrentSession.Get<Invoice>(invoiceInputModel.Id);
Mapper.Map<InvoiceInputModel, Invoice>(invoiceInputModel, invoice);
invoice.Project = _unitOfWork.CurrentSession.Get<Project>(invoiceInputModel.ProjectId);
// I want AutoMapper to do the above.
_unitOfWork.CurrentSession.SaveOrUpdate(invoice);
_unitOfWork.Commit();
return View(invoice);
}
我发现了一些关于"Resolvers"和ResolveUsing,但我没有使用它的经验。
我如何告诉AutoMapper这样做,同时保持我的实体模型,输入模型和视图模型之间的松耦合?还是有更好的办法?
我如何告诉AutoMapper发票。项目应该映射到基于InvoiceInputModel中的projd属性的项目实体,同时保持松耦合?
你不能。如果AutoMapper要去其他地方获取数据,那么它就不是松耦合的。
你没有在这个特定的视图中修改Project
——为什么你需要将关系设置为Project
, nHibernate不是足够聪明地看到属性没有改变,而不做任何事情吗?
我个人在视图模型中使用实体而不是id,因此绑定会自动发生。
http://sprokhorenko.blogspot.com/2011/03/bind-to-entity-id.html