我有两个实体,客户和帐户。客户有许多帐户。
我的客户映射是:
<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();” 不过要成功。
有人知道这里发生了什么吗?