0

私の販売プロセスでは、automapper を使用して Cart エンティティを CartModel にマップします。Cart エンティティには Currency エンティティが含まれており、CurrencyCode 文字列にマップする必要があります。そして質問があります。リポジトリ メソッドで nHibernate によって明示的にフェッチされた Currency エンティティでしょうか、それともマッピング ルールに残したままでも問題ありませんか? 最善の解決策は何ですか?

正直なところ、オートマッパーはクエリをデータベースに送信するべきではないと思います。そうですか?

マッピング:

 Mapper.CreateMap<Cart, CartModel>()
   .ForMember(dest => dest.Amount, src => src.MapFrom(s => s.ArticleList.Count))
   .ForMember(dest => dest.CurrencyCode, src => src.MapFrom(s => s.Currency.Code))
   .ForMember(dest => dest.CartLines, src => src.MapFrom(s => s.ArticleList));

カートサービス:

public virtual CartModel GetCartInfo(long cartId)
{
  var dto = new CartModel();
  var cart = _cartRepository.GetForCartSummary(cartId);
  Mapper.Map(cart, dto);

 return dto;
}

カートリポジトリ:

 public Cart GetForCartSummary(long cartId)
 {
    return Session.Query<Cart>()
               .Where(c => c.Id == cartId)
             //  .Fetch(c => c.Currency)
               .FetchMany(c => c.ArticleList)
               .Single();
  }
4

2 に答える 2

0

実際には、カートの nhibernate マッピングをどのように設定するかによって異なります。Currency が遅延読み込みとしてマップされていない場合、マッパーは nhibernate にデータベースの再クエリを強制しません。エンティティを正しくマッピングすると (オートマッパーではなく nhibernate マッピングを意味します)、nhibernate は 1 つのクエリでオブジェクト (およびすべての依存関係) を取得しようとします。

于 2013-09-22T09:12:26.613 に答える