【发布时间】:2019-12-10 23:06:59
【问题描述】:
我有两个模型:
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 class RuleException
{
public int ExceptionId { get; set; }
public int RuleId { get; set; }
public string ExceptionValue { get; set; }
public string ExcpetionResult { 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;
}
}
这似乎将查询反序列化为 RuleValidation 对象,但对于那些有异常的记录,不会加载 RuleException 对象。所以我尝试像这样修改返回:
var return= conn.QueryAsync<RuleValidation, RuleException>(
sQuery,
(ruleValidation, ruleException) =>
{
ruleValidion.RuleException = ruleException;
return return;
},
splitOn: "RuleId");
但我得到一个错误:
IDBConnection 不包含 QueryAsync 的定义,并且找不到接受“IDBConnection”类型的第一个参数的可访问扩展方法
这是我设置连接的方式(它确实适用于初始查询)
public IDbConnection Connection
{
get
{
return new SqlConnection(_configuration.GetConnectionString("ValidationRulesConnectionString"));
}
}
我是 dapper 新手,使用它没有任何问题,但这是我遇到的第一个问题,我似乎无法在 dapper 教程或在线查找解决方案。
【问题讨论】: