2012-05-23 132 views
0

真的想讓我的頭在這個附近,但看不到樹光。可能錯過了一些明顯的東西!c#流利的NHibernate一對多的關係對象返回null

在當我創建它工作的任何問題中,但是當我嘗試列出的值,鏈接是空的對象的數據庫...

有兩個對象,QuestionResponse。一個問題可以有很多的反應所以這裏的模型:

public class Question 
{ 
    public int Id { get; set; } 
    public int QuestionNumber { get; set; } 
    public string QuestionText { get; set; } 
    public IList<Response> Responses { get; set; } 

    public Question() 
    { 
     Responses = new List<Response>(); 
    } 
} 

public class Response 
{ 
    public int Id { get; private set; } 
    public Question Question { get; set; } 
    public int ResponseValue { get; set; } 
    public string ResponseText { get; set; } 
} 

,這裏是映射:

public class QuestionMap : ClassMap<Question> 
{ 
    public QuestionMap() 
    { 
     Id(q => q.Id); 
     Map(q => q.QuestionNumber); 
     Map(q => q.QuestionText).Length(300).Not.Nullable(); 
     HasMany<Response>(q => q.Responses).Inverse().AsBag(); 
    } 
} 

public class ResponseMap : ClassMap<Response> 
{ 
    public ResponseMap() 
    { 
     Id(x => x.Id); 
     References<Question>(x => x.Question).Not.Nullable(); 
     Map(x => x.ResponseText); 
     Map(x => x.ResponseValue); 
    } 
} 

所以,當我使用

var responses = _session.CreateCriteria(typeof(Response)).List<Response>(); 

和調試和看問題對象,它始終爲空。

回答

0

默認情況下NHibernate中的所有關係都是懶惰的。所以你有兩個選擇。在映射中設置Not.LazyLoad()或獲取策略以獲取響應,或者在查詢數據庫時執行獲取。

var responses = _session.CreateCriteria(typeof (Response)) 
       .SetFetchMode("Responses", NHibernate.FetchMode.Eager) 
       .List(); 

您可能需要當您使用.SetFetchMode(...)來設置抓取策略在迴應的映射。只是玩弄這兩個設置 - 一次一個或兩個

PS:順便說一句,我很困惑如何not.lazyload和提取工作,併發布了一個關於這個問題。 FluentNHibernate: LazyLoad and Fetch

+0

這沒有奏效 - 仍然返回null。我從另一個角度得到了這個工作,但我會將其標記爲已解決 – Matt

+0

然後將其作爲答案刪除併發布您的解決方案。你給我的答案投下了什麼理由?因爲它不適合你? – mynkow

+0

我沒投過票! – Matt

相關問題