2011-06-16 51 views
0

字段值,我得到這個例外無法獲得通過反射吸... NHibernate的查詢緩存與二級緩存

不能被 DictionaryMaster的 反射的getter得到一個字段的值。 k__BackingField

與此內部異常:

字段 '<> k__BackingField' 上 類型定義不是目標 對象,它是類型的 'System.Object的[]' 上的場。

只有當我在查詢中使用eagerloading時,問題才存在。下面我把我的課程,關係和查詢。

public class DictionaryMaster 
    { 
     public virtual IList<DictionaryItem> DictionaryItems { get; private set; } 
     public virtual System.String Code { get; private set; } 
     public virtual System.String Description { get; private set; } 
    } 

    public class DictionaryMasterMap : ClassMap<DictionaryMaster> 
    { 
     public DictionaryMasterMap() 
     { 
      Cache.ReadOnly().Region("dictionary"); 
      LazyLoad(); 

      Id(x => x.Code) //i know this is so ugly 
       .Column("DC_Code") 
       .GeneratedBy.Assigned(); 
      Map(x => x.Description).Column("DC_Desc"); 
      HasMany(x => x.DictionaryItems) 
       .Cascade.AllDeleteOrphan() 
       .Fetch.Select() 
       .AsBag() 
       .Inverse() 
       .Not.LazyLoad() 
       .KeyColumns.Add("DI_DCCode"); 
     } 
    } 

public class DictionaryItem 
    { 
     public virtual int Id { get; private set; } 
     public virtual string Code { get; private set; } 
     public virtual DictionaryMaster DictionaryMaster { get; private set; } 
     public virtual string Description { get; private set; } 
} 

    public class DictionaryItemMap : ClassMap<DictionaryItem> 
    { 
     public DictionaryItemMap() 
     { 
      Cache.ReadOnly().Region("dictionary"); 

      Id(x => x.Id) 
       .Column("DI_Id").GeneratedBy.Identity(); 

      Map(x => x.Code).Column("DI_Code"); 
      Map(x => x.Description).Column("DI_Desc"); 
      References(x => x.DictionaryMaster).Column("DI_DCCode"); 
     } 
    } 

查詢:

session.Query<DictionaryMaster>() 
        .Fetch(x => x.DictionaryItems) 
        .Cacheable() 
        .CacheMode(CacheMode.Normal) 
        .ToList(); 

回答

0

我發現了什麼是錯誤的:

第一:我真的不知道爲什麼功能NHibernate使用FieldBacking,因爲我有屬性訪問映射我的ID。

二:當我刪除私人修改爲二傳手則表明此異常:

異常發生XXX吸氣劑」

例外把我帶到https://nhibernate.jira.com/browse/NH-2587這個頁面。現在我想知道一些解決方法。有任何想法嗎?

+0

任何解決方案了嗎? – 2014-11-22 19:50:25

+0

應該在nHibernate 3.2.0中修復 – 2014-11-22 22:47:08

1

我懷疑許多用戶都面臨這個問題 - 也許如果你取消選擇答案作爲選擇的答案,問題將得到更多的關注。 AFAIK仍然沒有解決方法,它允許在同一個調用中使用Linq,Cacheable()和Fetch()。

這意味着作爲評論,但可能是因爲我的低排名我不能創建評論呢。

乾杯,

Jonno

+1

看看這裏http://stackoverflow.com/questions/7316931/2nd-level-cache-problem-with-join-query還有更多關於這個錯誤和解決方案 – 2011-09-23 07:47:29

+0

感謝您的鏈接,這是一個很好的回答,可以節省很多頭痛。值得一提的是Dan Tao對KeyEqualityComparer的回答:http://stackoverflow.com/questions/98033/wrap-a-delegate-in-an-iequalitycomparer – Jonno 2011-09-24 03:47:19

+0

感謝您的鏈接,我之前沒有看到該條目 – 2011-09-24 21:54:01