我正在尝试实现一个存储库,但是我的应用层遇到了一些问题。
注意:
TransactionModel
是一个带有一些延迟加载的NHibernate实体Transaction
是一个应用程序级对象Mapper
是AutoMapper,但与问题无关,因此没有为此我以前在我的应用层中有这个:
public Transaction GetTransaction(string itemName)
{
using (var context = _sessionFactory.OpenSession())
{
var tran = context.Get<TransactionModel>(itemName);
return Mapper.Map<Transaction>(tran);
}
}
哪个有效,但自从引入了一个repo来清理应用层后,我遇到了由延迟加载NHibernate.LazyInitializationException
引起的映射问题。
public Transaction GetTransaction(string itemName)
{
var tran = _transactionRepository.GetItem(itemName);
return Mapper.Map<Transaction>(tran);
}
显然问题是上下文在映射时已经关闭了。我应该如何将存储库与上下文结合使用?我应该在此应用程序层中创建上下文并将其传递给repo吗?像这样:
public Transaction GetTransaction(string itemName)
{
using (var context = _sessionFactory.OpenSession())
{
var tran = _transactionRepository.GetItem(context, itemName);
return Mapper.Map<Transaction>(tran);
}
}
这不仅会影响此映射问题,还会影响我想要阅读,修改和放回TransactionModel
的其他情况