2012-04-02 10 views
0

Dapperについて簡単な質問があります。私は4つのテーブルを返すクエリがあります。Dapperの1つのオブジェクトに4つのテーブルをマッピングする

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

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

私は、オブジェクトが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つのテーブル内のすべてのフィールドを取得したいとは限りません。

+0

コードを教えてください。それは助けをより簡単にします。 – Alex

答えて

2

これを実現するには、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}); 
}; 

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

希望があると便利です。

関連する問題