c# - Dapper 映射结果列表

标签 c# sql orm dapper

我的存储过程返回一个用户列表以及关系表中的组织详细信息。

我已使用 dapper 在我的 C# Web API 应用程序中执行存储过程。

我是 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
}

模型

 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; }
    }

最佳答案

您应该使用 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();

关于c# - Dapper 映射结果列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44243186/

相关文章:

java - HQL:组合左连接和右连接

c# - 这样的php系统要转成C#怎么办?

c# - 无法在新的 Chrome 浏览器标签页中打开 pdf

php - 获取表的总行数

内部连接和位置的 MySQL 查询错误

python - 如何访问模型的嵌套一对多关系?

javascript - Node.js Sequelize 模型文件不考虑配置

c# - 查找两个字符串之间的所有子字符串

c# - 使用 Windows API 从富文本控件检索文本的正确方法是什么?

mysql - 将包含日期的 Varchar 转换为 DATETIME