我正在从流利转变为喋喋不休,而且我遇到了非公共财产的问题。当我尝试映射它时,nhibernate会抛出一个异常,即memberInfo的null值。我得到了最新的源代码并逐步查看发生了什么,看起来像是这个电话:
memberOfReflectType = typeof (TEntity).GetProperty(memberOfDeclaringType.Name, memberOfDeclaringType.GetPropertyOrFieldType());
是造成问题的那个。 memberOfReflectType设置为null,然后在PropertyPath构造函数中,它在尝试访问它时会中断。
我的映射如下所示:
public class Foo
{
public virtual int SomePublicInt {get; set;}
protected internal virtual int _someProtectedInt {get; set;}
}
public class FooMap : ClassMapping<Foo>
{
public FooMap ()
{
Table("Foo");
ComposedId(compIDMapper =>
{
compIDMapper.Property(x => x.SomePublicInt, m => m.Column("SomePublicInt"));
compIDMapper.Property(x => _someProtectedInt, m => m.Column("SomeProtectedInt"));
});
}
}
如果我将Protected Internal int更改为公共int,它可以正常工作,但看起来您应该能够映射受保护的内部。我们可以用nhibernate做到这一点,没有任何问题。
我是否需要添加一些额外的映射命令来修复此问题?我用谷歌搜索了一段时间,但没有想出任何东西。
答案 0 :(得分:2)
对于非公共字段,请尝试使用字符串而不是lambda表达式重载:
compIDMapper.Property("_someProtectedInt", m => m.Column("SomeProtectedInt"));