2011-10-18 36 views
2

當使用NHibernate作爲我的嘗試使用其他對象的集合作爲成員嘗試處理不起眼的對象時出現以下錯誤ORM工具。當頂級對象在所述集合中沒有任何對象時,我收到一個錯誤,如「無法初始化集合:(一噸SQL)」。我知道它所引用的表是空的,應該是集合,但NHibernate似乎試圖填充它,然後拋出異常,因爲沒有數據。我會期望集合簡單地爲null或空而不是停止執行程序,這看起來像一個NHibernate的錯誤給我,但它可能我不正確地包裝ORM對象等,因爲我是相對較新的到技術。我的地圖附在下面。 _holdings集合是拋出錯誤的東西。Fluent NHibernate:在調試SharpDevelop中的NUnit測試時出現「無法初始化集合」錯誤

public class FundMap : ClassMap<Fund> 
{ 
    public FundMap() 
    { 
     Id(x => x._fundID).GeneratedBy.Identity(); 
     Map(x => x._cik); 
     Map(x => x._fundName); 
     //TODO: get correct handling of HasMany relationships. 
     HasMany(x => x._holdings) 
      //.Inverse() 
      .Cascade.All(); 
      //.Cascade.None(); 
    } 
} 

回答

3

NH始終將其自己的列表實現附加到首次訪問時延遲加載內容的對象。只有在查詢數據庫後,它才知道該集合真的是空的。

我的猜測是Holding的映射不符合hasmany的映射。考慮這樣的事情:

public HoldingMap() 
{ 
    References(x => x.Fund, "f_id"); 
} 

public FundMap() 
{ 
    HasMany(x => x._holdings) 
     //.Column("fund_id")  // the default 
     .Cascade.All(); 
} 

哈斯曼沒有正確的外鍵列和未能加載集團。您可以通過明確指定列來解決問題

HasMany(x => x._holdings) 
     .Column("f_id")  // same as in Holding 
     .Cascade.All(); 
相關問題