簡體   English   中英

nhibernate多對多關聯-屬性返回空集

[英]nhibernate many to many association - property returns null set

我在A和B之間有很多對很多的關系(我知道我可以考慮進行重構等,但這是另一回事)。 我的代碼是這樣的:

// given aId is the Id of an instance of A, and A has a many to many set of B's
    A a = myActiveSession.Get<A>(aId);
    a.Bs.Add(new B() {Name="dave"});

我得到一個異常,因為a.Bs為NULL。 這僅在測試套件的上下文中發生,當我運行單個測試時,我得到了一個測試集,一切正常。 我希望因為默認設置是惰性獲取,所以當我訪問屬性getter時B將被初始化,但是如果失敗,我希望得到一個異常,而不僅僅是null ...因為這樣我就沒有立即的線索了。 。 有任何想法嗎?

PS:這是映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="MyNamespace" assembly="MyAssembly">
  <class name="A" table="A" dynamic-update="true">
    <id name="id" type="integer" access="field">
      <column name="ID"/>
      <generator class="native"/>
    </id>
    <property name="name" type="string" access="field"/>
    <set name="Bs" table="A_B">
      <key column="a_id"/>
      <many-to-many column="b_id" class="B" />
    </set>
  </class>
</hibernate-mapping>

更新:當我修復了一些進行會話清理的代碼時,我設法使它起作用(請參閱@Darin Dimitrov的建議),但是,我仍然不明白是什么原因導致了這種奇怪的行為(而不是收到一些明顯的異常) )。 因此,目前這仍然是個謎。

單元測試可以從不同的線程並行執行,因此,它們應該是獨立的。 我懷疑在您的情況下, Session對象可在多個測試中重用,而另一個測試可能會弄亂Bs屬性。 確保會話是在測試內部創建的,然后被銷毀,即

using (var session = sessionFactory.OpenSession())
{
    A a = myActiveSession.Get<A>(aId);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM