- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在以独立于 EF-Core 的方式构建和执行我的查询,所以我依赖 IQueryable<T>
以获得所需的抽象级别。我正在替换等待的 SingleAsync()
调用等待 ToAsyncEnumerable().Single()
来电。我也在替换 ToListAsync()
与 ToAsyncEnumerable().ToList()
通话来电。但我只是碰巧遇到了ToAsyncEnumerable()
方法,所以我不确定我是否正确使用它。
为了澄清我所指的扩展方法,它们定义如下:
SingleAsync
和 ToListAsync
在 EntityFrameworkQueryableExtensions
上定义Microsoft.EntityFrameworkCore
中的类命名空间和程序集。 ToAsyncEnumerable
定义在 AsyncEnumerable
System.Linq
中的类System.Interactive.Async
中的命名空间部件。 ToAsyncEnumerable().Single()/ToList()
与
SingleAsync()/ToListAsync()
相比功能和性能相当?如果不是,那么它们有何不同?
最佳答案
对于返回序列的方法(如 ToListAsync
, ToArrayAsync
),我不希望有区别。
但是对于单值返回方法(First
、FirstOrDefault
、Single
、Min
、Max
、Sum
等的异步版本)肯定会有区别。与在IQueryable<T>
上执行这些方法的区别相同。对比 IEnumerable<T>
.在前一种情况下,它们由数据库查询处理,将单个值返回给客户端,而在后一种情况下,整个结果集将返回给客户端并在内存中处理。
因此,虽然抽象 EF Core 的想法总体上是好的,但它会导致 IQueryable<T>
的性能问题。因为可查询对象的异步处理未标准化,并转换为 IEnumerable<T>
更改执行上下文,因此实现单值返回 LINQ 方法。
附言通过标准化,我的意思如下。 IQueryable
的同步处理由 IQueryProvider
提供( 标准 接口(interface)来自 System.Linq
命名空间在 System.Core.dll
程序集中)Execute
方法。异步处理需要引入另一个 标准 类似于 EF Core 的接口(interface)定制 IAsyncQueryProvider
(在 Microsoft.EntityFrameworkCore.Query.Internal
程序集中的 Microsoft.EntityFrameworkCore.dll
命名空间内)。我想这需要 BCL 团队的合作/批准并且需要时间,这就是他们决定现在采取自定义路径的原因。
关于entity-framework - ToAsyncEnumerable().Single() 与 SingleAsync(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40560915/
我的测试代码: using (var db = new MyDbContext()) { string id = ""; string pictureUrl = db.UserProfile.
我正在以独立于 EF-Core 的方式构建和执行我的查询,所以我依赖 IQueryable以获得所需的抽象级别。我正在替换等待的 SingleAsync()调用等待 ToAsyncEnumerable
我是一名优秀的程序员,十分优秀!