Loquacious Nhibernate无法访问非公共属性进行映射

时间:2012-04-18 16:04:26

标签: c# nhibernate fluent-nhibernate

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

我是否需要添加一些额外的映射命令来修复此问题?我用谷歌搜索了一段时间,但没有想出任何东西。

1 个答案:

答案 0 :(得分:2)

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

compIDMapper.Property("_someProtectedInt", m => m.Column("SomeProtectedInt"));
相关问题