将4个表映射到Dapper中的单个对象

时间:2012-04-02 06:25:21

标签: mapping dapper

我有一个关于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均为空。

我不想使用联盟将所有字段放在一个表中。

1 个答案:

答案 0 :(得分: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数据库(:)。您需要将其替换为数据库的等效文件。

希望这很有用。

相关问题