我应该如何使用存储库?

时间:2013-07-18 09:08:10

标签: c# nhibernate domain-driven-design

我正在尝试实现一个存储库,但是我的应用层遇到了一些问题。

注意:

  • 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的其他情况

0 个答案:

没有答案