我有一个InvoiceInputModel
,其ProjectId
属性是对Project
实体的引用。理想情况下,我希望AutoMapper能够映射来自Invoice
的整个InvoiceInputModel
实体,如下所示:
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)
)
);
如何根据invoice.Project
中的Project
属性告诉AutoMapper ProjectId
是否应该映射到InvoiceInputModel
实体,同时保留松散耦合?
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执行此操作?或者有更好的方法吗?
答案 0 :(得分:0)
我个人在viewmodels中有实体而不是ID,因此绑定会自动发生。
http://sprokhorenko.blogspot.com/2011/03/bind-to-entity-id.html
答案 1 :(得分:0)
如何告诉AutoMapper invoice.Project应该根据InvoiceInputModel中的ProjectId属性映射到Project实体,同时保留松散耦合?
你做不到。如果AutoMapper要去其他地方获取数据,那么它就不会松散耦合。
你还没有修改这个特定视图中的Project
- 为什么你需要将关系设置为Project
,nHibernate不够智能,看不到属性没有改变,什么都不做?