將4個表映射到Dapper中的單個對象

dapper mapping

我有一個關於Dapper的快速問題。我有一個返回4個表的查詢。

三個表只有一個整數列。稱它們為field1,field2和field3。

第4表有5列說:A,B,C,D,E。

我創建了一個名為ResultSet的對象,它包含4個表中的所有字段

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均為空。

我不想使用Union來將所有Fields都放在一個表中。

熱門答案

您應該能夠通過將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數據庫(:)。您需要將其替換為數據庫的等效項。

希望這很有用。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因