【发布时间】:2017-01-13 08:40:17
【问题描述】:
使用 Entity Framework 6 和 asp.net webapi,并使用存储过程映射,
如何将ObjectContext 执行方法转换为异步任务?
【问题讨论】:
标签: asynchronous asp.net-web-api entity-framework-6 task
使用 Entity Framework 6 和 asp.net webapi,并使用存储过程映射,
如何将ObjectContext 执行方法转换为异步任务?
【问题讨论】:
标签: asynchronous asp.net-web-api entity-framework-6 task
作为 ExecuteFunction 的替代方案,您可以使用以下构造来为您提供异步执行:
Task<SomeResult[]> results = ctx.Database.SqlQuery<SomeResult>("EXEC sp_myproc {0}, {1}, {2}", p1, p2, p3).ToArrayAsync();
或:
SomeResult[] results = await ctx.Database.SqlQuery<SomeResult>("EXEC sp_myproc {0}, {1}, {2}", p1, p2, p3).ToArrayAsync();
如果你需要使用 ExecuteFunction 方法,你可以试试这个:
IDbAsyncEnumerable<SomeResult> enumerable = this.ExecuteFunction<SomeResult>("sp_myproc", p1, p2, p3) as IDbAsyncEnumerable<SomeResult>;
IDbAsyncEnumerator<SomeResult> enumerator = enumerable.GetAsyncEnumerator();
while (await enumerator.MoveNextAsync(CancellationToken.None))
{
SomeResult res = enumerator.Current;
...
}
话虽如此,值得一提的是,如果您决定使用 ExecuteFunction 方法,实际的 SQL 语句将在 ExecuteFunction 行上运行,而不是在枚举结果时运行。
【讨论】:
ExecuteFunction 版本吗?