【发布时间】:2015-07-06 09:27:49
【问题描述】:
不幸的是,我们的数据库可以追溯到 90 年代。它的遗产是如此强大,以至于我们仍在使用 SP 来完成大部分 CRUD 操作。但是,Dapper 似乎很适合,我们才刚刚开始使用它。
但是,我有点担心如何处理单个数据行。在这种情况下,我使用 QueryAsync 调用传递 ID 的 SP。如您所见,对象在异步调用之外返回(*)。
我会遇到麻烦吗?如果是这样,有人知道如何处理吗?我需要改用 QuerySync 吗?
public class SchemePolicyRepository : ISchemePolicyRepository
{
private readonly SqlConnection sql;
protected SchemePolicyRepository(SqlConnection connection)
{
sql = connection;
}
...
public async Task<SchemePolicy> GetById(string id)
{
var schemePolicy = await sql.QueryAsync<SchemePolicy>("risk.iE_GetSchemePolicyById",
new { Id = id },
commandType: CommandType.StoredProcedure);
return schemePolicy != null ? schemePolicy.FirstOrDefault() : null;
}
...
}
(*)FirstOfDefault() 返回的 SchemePolicy 对象不是异步方法。
【问题讨论】:
-
如您所见,对象没有从异步调用中返回。 这是什么意思?你的意思是你的查询不起作用?
-
存储过程没什么问题,它们是 SQL,就像生成的沉重、缓慢的 ORM 一样。
-
感谢@YuvalItzchakov,我已经更新了帖子
-
@Crowcoder 你是对的,这就是为什么我们更喜欢使用 Dapper 而不是 EF。旧式 ADO.NET 仍然是我们喜欢在这里使用的东西 :)
-
所以基本上,你很担心,因为
FirstOrDefault不是异步的?
标签: c# asynchronous repository dapper