0

流暢なものから派手なものに変えようとしていますが、非公開の物件で問題が発生しました。マップしようとすると、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をpublicに変更すると、正常に機能しますが、protectedinternalをマップできるはずです。これはnhibernateで問題なく実行できます。

これを修正するために追加する必要のあるマッピングコマンドはありますか?しばらくググってみましたが、何も思いつきませんでした。

4

1 に答える 1

2

非パブリックフィールドの場合は、ラムダ式の代わりに文字列でオーバーロードしてみてください。

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