2011-06-16 59 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