asp.net mvC语言 AutoMapper如何访问我的DAL ?



我有一个具有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应该映射到基于InvoiceInputModelProjectId属性的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

相关内容

  • 没有找到相关文章

最新更新