在我的銷售過程中,我使用automapper將Cart實體映射到CartModel。 購物車實體containts貨幣實體女巫應映射到CurrencyCode字符串。我有一個問題,應該是由nHibernate在存儲庫方法中明確提取的貨幣實體,或者當我在我的映射規則中保留時,這是可以的? 什麼是最佳解決方案?使用NHibernate和Automapper獲取數據
老實說,我認爲automapper不應該發送查詢到數據庫中,我是對的?
映射:
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));
CartService:
public virtual CartModel GetCartInfo(long cartId)
{
var dto = new CartModel();
var cart = _cartRepository.GetForCartSummary(cartId);
Mapper.Map(cart, dto);
return dto;
}
CartRepository:
public Cart GetForCartSummary(long cartId)
{
return Session.Query<Cart>()
.Where(c => c.Id == cartId)
// .Fetch(c => c.Currency)
.FetchMany(c => c.ArticleList)
.Single();
}
是的,我知道。我在nHibernate中啓用了延遲加載,因此在調用automapper時會獲取數據。但是,確定,該自動映射器運行查詢? – Adrian
這取決於,如果你總是使用automapper映射對象和子對象,那麼它沒有任何意義,懶加載它...... 正如我所說,定義它不懶惰,否則你只會運行太多查詢來檢索您的對象... 或者,如果您不需要調用新查詢的子屬性,請不要自動映射它們... – MichaC
感謝您的明確答案。 – Adrian