我想使用Dapper将扁平行映射到简单的父/子对象 我不确定如何做到这一点,这是一个简单的表格,查询和要映射的类的例子。
项目表
id,name,status_a,status_b,status_c
状态表
id,description
查询
select
prj.id,
prj.name,
a.description,
b.description,
c.description
from project prj
join status a on prj.status_a = a.id
join status b on prj.status_b = b.id
join status c on prj.status_c = c.id
要映射到的类
class Project
{
public string Name { get; set; }
public Status Status { get; set; }
}
class Status
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
答案 0 :(得分:1)
看起来你需要使用Multi Mapping。
sqlConnection.Query<Project, Status, Project>(yourQueryString,
(project, status) => {
project.Status = status;
return project;
},
splitOn: "description");
或类似的东西。我还没有测试过这个代码,但这是基本的想法。
sqlConnection.Query基本上告诉Dapper你的sql查询将返回两个对象(Project和Status)。这是通用参数中的前两种类型推断的。第三个(Project)告诉Dapper这个Dapper调用应该最终返回一个Project。
第一个参数将是您的查询,就像正常一样。 第二个参数是一些函数,它将从您的查询中接收项目和状态,并期望您返回一个项目对象。在这里,我们只是将状态分配给项目的状态属性。
splitOn让你告诉Dapper&#34; sql查询中的哪一点做&#34; Project&#34;对象结束和&#34;状态&#34;对象开始。
select
prj.id,
prj.name,
a.description,
b.description,
c.description
from project prj
join status a on prj.status_a = a.id
join status b on prj.status_b = b.id
join status c on prj.status_c = c.id
您可以看到您的项目对象以prj.name结尾,您的状态对象从a.description开始。