Dapper映射结果列表

4

我的存储过程从关系表中返回一组用户及其组织机构的详细信息。

我在我的C# Web API应用程序中使用了Dapper来执行存储过程。

我对Dapper还不熟悉。我该如何将存储过程返回的结果映射到我的模型中?

存储过程

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
}

Models

 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个回答

6

您应该使用期望返回两种类型的记录集(用户数据和组织数据)的 查询 重载,并将组织数据分配给用户实体:

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();

请问您能解释一下为什么查询括号中有两个用户对象吗? - coding1223322
3
@user4453701 的前两个通用参数是结果集中的数据 - 每行都有用户和组织的数据。最后一个参数是结果类型。在这种情况下,它与第一个参数匹配,因为您想返回带有组织的用户,但您可以使用一些第三种类型的返回值,例如 ExtendedUser,并从处理原始数据后获得的用户和组织构造它。 - Sergey Berezovskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接