Dapper Correct Object / Aggregate Mapping

dapper

質問

私は最近、生成されているSQLをあまり気に入らず、より多くの制御を望んでいたので、DapperをEFの代替候補として評価し始めました。ドメインモデルで複雑なオブジェクトのマッピングに関する質問があります。プロバイダと呼ばれるオブジェクトがあるとしましょう。プロバイダには、プロバイダプロバイダオブジェクト(つまり集約ルート)を経由してアクセスする必要があるIEnumerable型のいくつかのプロパティを含めることができます。私はQueryMultipleとMap拡張メソッドを使って説明した同様の記事を見てきましたが、Dapperがこれを行うことができるならばオブジェクトグラフをロードした全体のグラフを返すメソッドを記述したいのですがまたはそれが片付けられなければならない場合。例として、私のオブジェクトは次のように見えると言うことができます:

public AggregateRoot
      {
           public int Id {get;set;}
           ...//simple properties
           public IEnumerable<Foo> Foos
           public IEnumerable<Bar> Bars
           public IEnumerable<FooBar> FooBars
           public SomeOtherEntity Entity
           ...
      }

Dapperを使用してオブジェクトグラフ全体に簡単に埋め込む方法はありますか?

受け入れられた回答

私も同様の状況があります。私はすべてのサブオブジェクトが戻って来るように、フラットな私のSQLを返しました。次に、クエリ<>を使用して完全なセットをマップします。あなたのセットがどれくらい大きいか分かりません。

だからこのようなもの:

var cnn =  sqlconnection();

var results = cnn.Query<AggregateRoot,Foo,Bars,FooBar,someOtherEntity,AggregateRoot>("sqlsomething"
                (ar,f,b,fb,soe)=>{
                    ar.Foo = f;
                    ar.Bars = b;
                    ar.FooBar = fb;
                    ar.someotherentity = soe;
                    return ar;

                },.....,spliton:"").FirstOrDefault();

したがって、Queryタグの最後のオブジェクトは戻りオブジェクトです。 SplitOnの場合、戻り値はマッピングが実行されるフラットな配列であると考える必要があります。新しいマッピングがそこから開始するように、新しいオブジェクトごとに最初の戻り値を選択します。

例:

select ID,fooid, foo1,foo2,BarName,barsomething,foobarid foobaritem1,foobaritem2 from blah

splitonは "ID、fooid、BarName、foobarid"となります。リターンセットを実行すると、各オブジェクトで見つけることができるプロパティがマップされます。

私はこれが助けて、あなたのリターンセットがフラットに戻るには大きすぎないことを願っています。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ