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