0

我正在从流利的语言转换为健谈的语言,并且遇到了非公共财产的问题。当我尝试映射它时,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 做到这一点,没有任何问题。

我必须输入一些额外的映射命令来解决这个问题吗?我用谷歌搜索了一段时间,但没有想到任何东西。

4

1 回答 1

2

对于非公共字段,请尝试使用字符串而不是 lambda 表达式进行重载:

compIDMapper.Property("_someProtectedInt", m => m.Column("SomeProtectedInt"));
于 2012-04-18T18:55:01.270 回答