Dapper 映射结果列表
Posted
技术标签:
【中文标题】Dapper 映射结果列表【英文标题】:Dapper Mapping List of Results 【发布时间】:2017-05-29 13:02:16 【问题描述】:我的存储过程从关系表中返回用户列表以及组织详细信息。
我已使用 dapper 在我的 C# Web API 应用程序中执行存储过程。
我是新手。如何将存储过程返回的结果映射到我的模型?
存储过程
CREATE PROCEDURE [dbo].[GetAllUsersByOrganisation]
@OrganisationId int = 0
AS
SELECT * from dbo.Users u
inner join dbo.Organisations org on u.OrganisationId = org.Id
Where u.OrganisationId = @OrganisationId
执行方法
public List<User> GetUseryOrganisation(int organisationId)
var users = DataContextFactory.GetConnectionString(_settings)
.Execute("dbo.GetAllUsersByOrganisation", new OrgantisationId = organisationId,
commandType: CommandType.StoredProcedure);
// Map to return List of User
型号
public class User
public string Title get; set;
public string FirstName get; set;
public string LastName get; set;
public string PhoneNumber get; set;
public string EmailAddress get; set;
public Organisation Organisation get; set;
public class Organisation
public int Id get; set;
public string Name get; set;
【问题讨论】:
【参考方案1】:您应该使用Query
重载,它期望返回的记录集中有两种类型(用户数据和组织数据),然后将组织数据分配给用户实体:
var users = DataContextFactory.GetConnectionString(_settings)
.Query<User, Organisation, User>(
"dbo.GetAllUsersByOrganisation",
(u,o) => u.Organisation = o; return u; , // map function
new OrgantisationId = organisationId,
commandType: CommandType.StoredProcedure);
return users.ToList();
【讨论】:
你能解释一下为什么 Query 括号中有两个用户对象吗? @user4453701 前两个通用参数是结果集中的数据 - 每行都有用户数据和组织数据。最后一个参数是一种结果。在这种情况下,它匹配第一个参数,因为您想返回带有组织的用户,但您可以使用第三种类型作为返回值,例如ExtendedUser 并从处理 raw 后拥有的 User 和 Organization 构造它以上是关于Dapper 映射结果列表的主要内容,如果未能解决你的问题,请参考以下文章