我正在使用 EF 6.1.1 和数据库优先。当我将存储过程导入 edmx 并生成 DBContext 时,它看起来像这样:
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<TestSP_Result>("TestSP", params[]...)
它返回一个 ObjectResult ,它实现 IDbAsyncEnumerable 所以我这样做是为了异步读取数据:
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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)