我正在从流利的语言转换为健谈的语言,并且遇到了非公共财产的问题。当我尝试映射它时,nhibernate 会抛出一个异常,即 memberInfo 的值为空。我得到了最新的源代码并逐步查看发生了什么,它看起来像这样的调用:
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"));
});
}
}
如果我将受保护的内部 int 更改为公共 int,它可以正常工作,但似乎您应该能够映射受保护的内部。我们可以用 nhibernate 做到这一点,没有任何问题。
我必须输入一些额外的映射命令来解决这个问题吗?我用谷歌搜索了一段时间,但没有想到任何东西。