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运行存储过程并异步读取结果?

EntityFramework存储过程函数导入可以读取异步

我是如何做到的:

var results = await ctx.Database.SqlQuery<TResult>("EXEC sp_foo {0}, {1}", p1, p2)
                  .ToArrayAsync();