[英]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.