Dapper.NET - 映射多对多的数据库关系?

时间:2017-02-13 16:37:54

标签: c# sql-server dapper

我在SQL Server中有两个表,如下所示:

Table1
    int Id
    varchar(32) Name
    varchar(256) Description

Table2
    int LeftKey
    int RightKey

我在C#应用程序中有两个类,如:

MyClass
    Name
    Description

Match
    MyClass Left
    MyClass Right

我想要做的是创建一个Dapper查询,它将选择Table2中的所有行,加入Table1(* Key-> Id)并生成Match对象列表,并相应地设置Left和Right属性。

使用Dapper有一个很好的干净方法吗?

我已经在Stackoverflow上查看了其他多对多的问题,它们似乎都与我的场景不同。

1 个答案:

答案 0 :(得分:0)

Dapper实际上只是一种分割网格并快速将列分配给对象的方法。听起来你只有两次相同的物体 - 一个用于左,一个用于右。

所以...你的sql可能看起来像这样:

select 
lk.*,
rk.*
from Table2 t2
inner join Table1 t1_left on t1_left.Id = t2.LeftKey
inner join Table1 t1_right on t1_right.Id = t2.RightKey

你的衣服可能看起来像这样:

connection.Query<MyClass,MyClass,Match>(sqlhere,(mc1,mc2)=>{

var match = new Match();
match.Left = mc1;
match.Right = mc2;

return match;

});

不需要在sql中返回Table2中的任何内容,也不需要使用Dapper自动映射它。它实际上就像一个元组,所以我们可以在返回函数中创建它。