1

NH 3.2でコードによるマッピングを開始しようとしていますが、少し迷っています。

たとえば、見つけた例が何を意味するのかを理解できるように、基本的なドキュメントへのポインタが必要です...

public class CustomerMap : ClassMapping<Customer>  
{  
     public CustomerMap()  
     {  
         Lazy(false);  
         Id(x => x.ID, map => map.Generator(Generators.HighLow,  
                       gmap => gmap.Params(new {max_low = 100})));  
         Property(x => x.FirstName, map => map.NotNullable(true));  
         Property(x => x.LastName, map => map.NotNullable(true));  
         Property(x => x.Email, map =>  
                                    {  
                                        map.Unique(true);  
                                        map.Length(50);  
                                        map.NotNullable(true);  
                                    });  
     } 

さて、ここで一体何が起こっているのかを教えてくれるドキュメントはどこにありますか。ClassMappingにはIdメソッドがありますが、どのようなパラメーターを使用できるのか、map.Generatorクラスが何をしているのかわかりません。さらに、x => x.IDは何をしていますか?私が理解していることから、xへの参照はx.idに行くと言うべきですが、xはplcae全体で使用されています!?!プロパティ関数に関するドキュメント(ClassMappingクラス全体をハックする)は大いに役立ちます。

道に迷いました。

4

2 に答える 2

1
 "what is the x=> x.ID doing?"

その行は、「このクラスのIdフィールドは、このクラスのIDと呼ばれるプロパティにマップされています」と述べています。これはラムダ式であり、xはそのラムダ式のローカル変数です。

"From what I understand it should say that the reference to x goes to x.id, but x is used all over the plcae!?!"

'reference'が何を意味するのかわかりません...これはNHibernate固有の構文ではありません。これは、NHibernateがマッピングとして解釈することを選択したジェネリックスとlinq式の巧妙な活用です。

ドキュメントに関しては、流暢なものはXMLのものに非常に似ています。XML関連のドキュメントはここhttp://www.nhforge.org/doc/nh/en/index.htmlにあります。

于 2011-09-16T13:43:53.910 に答える
1

最初に言及する価値のあることの 1 つは、これがFluentNhibernateであるということです。これは、上記で使用した例を使用してコードに nhibernate 構成を保存できるようにするプロジェクトです。ウェブサイトにはかなりのドキュメントがあります。

とはいえ、始めるための簡単なヒントをいくつか紹介します。

ClassMapping には Id メソッドがありますが、それが取ることができる可能なパラメーターや、マップ クラスが何をしているのかわかりません。

Id メソッドは を受け取りExpression<Func<T, object>>ます。これにより、下のコードが id フィールドを表す式ツリーを取得できます。取得した単純なケースでは、式ツリーを取得し、次のような ID マッピングを生成します (xml 構成を使用してこれを行っていた場合。これも推測であり、間違っている可能性があります)。

<id name="Id"><generator class="native" /></id>

次のように、複合 ID を使用することもできます。

CompositeId()
    .KeyProperty(t => t.Cat)
    .KeyProperty(t => t.Color)
    .KeyProperty(t => t.Name);

さらに、 x=> x.ID は何をしているのですか? 私が理解していることから、xへの参照はx.idに行くと言うべきですが、xはいたるところで使用されています!?!

式ツリーでできることをよく理解するために、式ツリーを読むことをお勧めします。そうすれば、ラムダ式を使用してオブジェクト グラフに関する情報を取得する方法を確認できます。xは、ラムダが期待するオブジェクトの単なるプレース ホルダーであり、 に渡されるジェネリック パラメータによって型指定されますClassMap<T>。したがって、あなたの場合は axであり、式ツリーパーサーで検査できます。TCustomer

これが役立つことを願っています!

于 2011-09-16T13:37:55.827 に答える