EntityFramework存储过程函数导入可以读取异步
本文关键字:读取 异步 导入 存储过程 函数 EntityFramework | 更新日期: 2023-09-27 18:22:20
我使用的是EF 6.1.1和Database First。当我将存储的proc导入edmx并生成DBContext时,它看起来像这样:
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<TestSP_Result>("TestSP", params[]...)
返回一个ObjectResult<T>,实现IDbSyncEnumerable<所以我这样做是为了异步读取数据:
IDbAsyncEnumerable<T> enumerable = objectResult as IDbAsyncEnumerable<T>;
IDbAsyncEnumerator<T> enumerator = enumerable.GetAsyncEnumerator();
List<T> list = new List<T>();
bool moreItems = await enumerator.MoveNextAsync(CancellationToken.None);
while (moreItems)
{
list.Add(enumerator.Current);
moreItems = await enumerator.MoveNextAsync(CancellationToken.None);
}
return list;
这真的是异步读取数据吗?我附加了探查器,实际的SQL语句在ExecuteFunction行中运行,而不是在枚举结果时。
是否有合适的方法从DBContext运行存储过程并异步读取结果?
我是如何做到的:
var results = await ctx.Database.SqlQuery<TResult>("EXEC sp_foo {0}, {1}", p1, p2)
.ToArrayAsync();