我得到了这个例外
无法获得字段值 反射吸气剂 DictionaryMaster。
k__BackingField
with this inner exception:
Field '<>k__BackingField' defined on
type is not a field on the target
object which is of type
'System.Object[]'.
The problem exists only when i use eagerloading in query. Below i put my classes, relations and query.
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");
}
}
Query:
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");
}
}
答案 0 :(得分:1)
我怀疑很多用户都面临着这个问题 - 也许如果您将答案标记为所选答案,那么问题就会得到更多关注。 AFAIK仍然没有允许在同一个呼叫中使用Linq,Cacheable()和Fetch()的解决方法。
这是一个评论,但可能是因为我的SO排名很低,我还无法创建评论。
干杯,
Jonno
答案 1 :(得分:0)
我发现了什么问题:
首先:我真的不知道为什么Fluent NHibernate使用FieldBacking映射我的Id,因为我有属性访问权。
第二:当我为setter删除private修饰符时,它显示了这个异常:
异常发生了xxx的getter
这个例外让我进入了这个页面https://nhibernate.jira.com/browse/NH-2587。现在我想知道一些解决方法。有任何想法吗?