2012-04-18 7 views
0

私は流暢から貧弱に変換しています。非公開のプロパティで問題に取り掛かりました。それをマップしようとすると、nhibernateは、memberInfoのnull値を例外としてスローします。私は、最新のソースコードを持って、何が起こっているか見るために通過ステップ、そしてそれは、この呼び出しのようになります。Loquacious Nhibernateがマッピング用の非公開プロパティにアクセスできない

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型を変更した場合、それは正常に動作しますが、あなたは内部の保護されたマッピングすることができるはずのようにそれはそう。私たちは何の問題もなくnhibernateでこれを行うことができました。

これを修正するために追加するマッピングコマンドがいくつかありますか?私はしばらくの間、周りを見つけたが、何も思い付きませんでした。非パブリックフィールドについて

答えて

2

、代わりにラムダ式の文字列で過負荷を試してみてください。

compIDMapper.Property("_someProtectedInt", m => m.Column("SomeProtectedInt")); 
+0

これはそれを修正するが、それが必要な理由を知っていますか? – Zipper

+0

NHibernateのプロキシアビリティと関連しているかもしれません。ラムダ型オーバーロードは、パブリックメンバー専用です。 – NOtherDev

関連する問題