我正在尝试执行一个相当简单的ChildClass映射,我不想让持久层知道类层次结构。
public class BaseClass<T>
{
public int Id { get; set; }
public int A;
}
public class ChildClass : BaseClass<object>
{
}
public class ChildClassMap : ClassMap<ChildClass>
{
public ChildClassMap()
{
Not.LazyLoad();
Id(x => x.Id);
Map(x => x.A)
.Access.Field()
;
}
}
这里的问题变量是A.当我尝试构建sessionfactory时,我得到了:
NHibernate.PropertyNotFoundException : Could not find field 'A' in class 'Experiments.ChildClass'
到目前为止,我找到了两种方法来解决这个问题。
从BaseClass
中删除泛型参数public class BaseClass { ...
public class ChildClass : BaseClass { ...
使用Property Access而不是field。
public class BaseClass {
...
public int A { get; set; }
public class ChildClassMap : ClassMap<ChildClass> {
...
Map(x => x.A)
.Access.Property()
;
我假设这是一个问题,因为对泛型类型的反思(尽管如果这是NHibernate的故意设计决定,我想了解原因)。
目前我只是作为一个属性进行映射(使用解决方法#2) - 但是有什么办法可以在fluent-nhibernate中映射我的第一个例子吗?