NHibernate - 非法访问加载集合

标签 nhibernate hbm

我有两个实体:客户和帐户。一个客户有多个账户。

我的客户映射是:

<bag cascade="all" name="Accounts" table ="Accounts" mutable="true" inverse="true">
  <key>
    <column name="Customer_Id" />
  </key>
  <one-to-many class="Account, POCOEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>

我的帐户映射是:

<many-to-one cascade="all" class="Customer, POCOEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Customer">
  <column name="Customer_Id" />
</many-to-one>

在我的应用程序中,我根据客户 ID 检索客户:

var customer = _customerRepository.GetById(custID);

然后我尝试通过以下方式获取客户的第一个帐户:

Account account = customer.Accounts.FirstOrDefault();

然后我收到以下异常:“NHibernate.LazyInitializationException:非法访问加载集合”

我已经尝试过针对此处发布的此问题的其他解决方案,但没有任何效果。真正奇怪的是,如果我在尝试访问该帐户之前插入以下代码,那么一切都会正常:

var acc = from a in _accountRepository.GetAll()
                  where a.Customer.Equals(customer)
                  select a;

我在前面的代码中所做的只是创建一个我什至不使用的变量。不知何故,它会导致语句“Account account = customer.Accounts.FirstOrDefault();”虽然要成功。

有人知道这里发生了什么吗?

最佳答案

我认为这非常简单:您不再有与该实体关联的打开的 ISession。而且,我认为这是由于将 session 管理(打开/关闭 session )作为存储库的责任,这是错误的。

关于NHibernate - 非法访问加载集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512807/

相关文章:

c# - 我怎样才能使 NHibernate 在数据库停机时幸存下来?

c# - Nhibernate 在 db create 脚本中生成错误

nhibernate - 在NHibernate 3.2中通过代码将Enum映射为字符串

java - 在 Hibernate Java 中获取两个日期之间的用户数据

java - 希望通过hibernate hbm xml映射按降序排序

NHibernate 多对多,关联表上带有 bool 标志

.net - NHibernate:覆盖 Equals 和 GetHashCode 的原因

java - hibernate中查询语法异常

hibernate - 生成的完整构造函数包含太多参数

java - 使用 hibernate 映射 boolean 值