Dapperの1つのオブジェクトに4つのテーブルをマッピングする

dapper mapping

質問

私はDapperについて簡単に質問します。私は4つのテーブルを返すクエリがあります。

3つのテーブルには整数列が1つしかありません。 field1、field2、およびfield3と呼んでください。

4番目の表には、A、B、C、D、Eの5つの列があります。

私は4つのテーブルからすべてのフィールドを持つResultSetというオブジェクトを作った

public class ResultSet
{
    int field1;
    int field2;
    int field3;
    string A;
    string B;
    string C;
    string D;
    string E
}

どのように結果をResultSetオブジェクトにマップするのですか?

現在、私は希望の結果を得るためにQueryMultipleを使用しています。しかし、最初の3つの列のみをマッピングしています。 A、B、C、D、およびEはすべてnullです。

私は連合を使って1つのテーブルですべてのフィールドを取得したいとは思わない。

人気のある回答

これを実現するには、connection.Query拡張メソッドに適切なパラメータ化されたSQL文を渡し、そのオブジェクトをTypeパラメータとして渡します。

Dapperは、選択リストの項目を適切にエイリアスする(つまり、オブジェクトの対応するプロパティ名をエイリアスする)と仮定して、クエリをオブジェクトに魔法のようにマップします。

これらの行に沿った何かがうまくいくはずです:

public class SomeObject
{
   public int Field1 {get; set;}
   public int Field2 {get; set;}
   public int A {get; set;}
   public int B {get; set;}
   public int C {get; set;}
   public int D {get; set;}
}

using(var connection = SomeConnectionFactory.GetConnection())
{
    var yourObject = 
        connection.Query<SomeObject>("select tab1.someThing as Field1, " +
                                     "tab2.someThing as Field2, " +
                                     "tab4.onePotato as A, " +
                                     "tab4.twoPotato as B, " +
                                     "tab4.threePotato as C, " +
                                     "tab4.four as D " +
                                     "from someTable tab1 " +
                                     "join someTable2 tab2 on tab1.Id = tab2.Id " +
                                     "$$ etc etc for the other joins $$" +
                                    "where tab1.Id = :ID " + ,new {ID = someId});
};

1つは、Oracleデータベース(:)に対してバインド変数の構文を使用したことです。これをDBの同等のものに置き換える必要があります。

便利だと思っています。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow