C# 将短小的查询反序列化到模型中

C# 将短小的查询反序列化到模型中,c#,dapper,C#,Dapper,我有两种型号: public class RuleValidation { public int RuleId { get; set; } public string RuleName { get; set; } public int ClientId { get; set; } public string ClientName { get; set; } public List<RuleException> RuleExcpetions {

我有两种型号:

 public class RuleValidation
{
    public int RuleId { get; set; }
    public string RuleName { get; set; }
    public int ClientId { get; set; }
    public string ClientName { get; set; }
    public List<RuleException> RuleExcpetions { get; set; }
}
我使用以下查询加载模型:

 public async Task<RuleValidation> GetRulesByClient(string clientId)
    {
        using (IDbConnection conn = Connection)
        {
            string sQuery = @"SELECT 
                                    Client.Id as 'ClientName',
                                    Client.ClientName, 
                                    Rules.Id,
                                    Rules.RuleName,
                                    Rules.Code, 
                                    RuleException.ExceptionValue, 
                                    RuleException.ExceptionResult
                              FROM 
                                    Rules 
                              LEFT OUTER JOIN
                                    RuleException ON Rules.Id = RuleException.RuleId 
                              RIGHT OUTER JOIN
                                    Client ON Rules.Id = Client.RuleId
                              WHERE
                                    Client.ClientName = @CLIENTID";
            conn.Open();
            var result = await conn.QueryAsync<RuleValidation>(sQuery, new { CLIENTID = clientId });
            return (RuleValidation)result;
        }
    }

我是dapper新手,使用它没有问题,但这是我遇到的第一个问题,我似乎无法在dapper教程或在线查找中找到解决方案。

You
QueryAsync
call缺少返回类型。它需要3个参数——要映射的两个对象和返回类型。您还需要将异常添加到列表中:

var return= conn.QueryAsync<RuleValidation, RuleException, RuleValidation>(
            sQuery,
            (ruleValidation, ruleException) =>
            {
                if(ruleException != null)
                {
                    ruleValidation.RuleExceptions.Add(ruleException);
                }

                return ruleValidation;
            },
            splitOn: "RuleId");

有一个示例

QueryAsync
调用缺少返回类型。它需要3个参数——要映射的两个对象和返回类型。您还需要将异常添加到列表中:

var return= conn.QueryAsync<RuleValidation, RuleException, RuleValidation>(
            sQuery,
            (ruleValidation, ruleException) =>
            {
                if(ruleException != null)
                {
                    ruleValidation.RuleExceptions.Add(ruleException);
                }

                return ruleValidation;
            },
            splitOn: "RuleId");

有一个例子

我将代码更新为上面的代码,它似乎可以工作。但现在我发现了一个错误:在使用多重映射API时,如果您有Id以外的键(参数“splitOn”),请确保设置splitOn参数。@john您需要在select语句中包含RuleId字段。我将代码更新为上面的内容,它似乎可以工作。但现在我发现了一个错误:在使用多重映射API时,如果您有Id以外的键(参数“splitOn”),请确保设置splitOn参数。@john您需要在select语句中包含RuleId字段
 public IDbConnection Connection
    {
        get
        {
            return new SqlConnection(_configuration.GetConnectionString("ValidationRulesConnectionString"));
        }
    }
var return= conn.QueryAsync<RuleValidation, RuleException, RuleValidation>(
            sQuery,
            (ruleValidation, ruleException) =>
            {
                if(ruleException != null)
                {
                    ruleValidation.RuleExceptions.Add(ruleException);
                }

                return ruleValidation;
            },
            splitOn: "RuleId");
public class RuleValidation
{
    public int RuleId { get; set; }
    public string RuleName { get; set; }
    public int ClientId { get; set; }
    public string ClientName { get; set; }
    public List<RuleException> RuleExcpetions { get; set; } = new List<RuleException>();
}