【问题标题】:Dapper Mapping List of ResultsDapper 映射结果列表
【发布时间】: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; }
    }

【问题讨论】:

    标签: c# sql orm dapper


    【解决方案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 构造它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多