1

エンティティへの参照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にマップする必要があるAutoMapperにどのように指示しますか?ProjectProjectIdInvoiceInputModel

私の請求書/編集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に指示するにはどうすればよいですか?それとももっと良い方法はありますか?

4

2 に答える 2

0

疎結合を維持しながら、InvoiceInputModel の ProjectId プロパティに基づいて、invoice.Project を Project エンティティにマップする必要があることを AutoMapper に伝えるにはどうすればよいですか?

できません。AutoMapper がデータを取得するために別の場所に移動している場合、それは疎結合ではありません。

とにかく、この特定のビューで を変更していません。Projectなぜ関係を に設定する必要があるのProjectですか?

于 2011-04-12T23:31:42.643 に答える
0

私は個人的に ID ではなくビューモデルにエンティティを持っているので、バインドは自動的に行われます。

http://sprokhorenko.blogspot.com/2011/03/bind-to-entity-id.html

于 2011-04-12T17:45:58.830 に答える