- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们有 3 种不同的方法从 EFCore 获取单个项目,它们是 FirstOrDefaultAsync()
、SingleOrDefaultAsync()
(包括没有返回默认值的版本,我们也有FindAsync()
可能还有更多类似 LastOrDefaultAsync()
的目的。
var findItem = await dbContext.TodoItems
.FindAsync(request.Id)
.ConfigureAwait(false);
var firstItem = await dbContext.TodoItems
.FirstOrDefaultAsync(i => i.Id == request.Id)
.ConfigureAwait(false);
var singleItem = await dbContext.TodoItems
.SingleOrDefaultAsync(i => i.Id == request.Id)
.ConfigureAwait(false);
我想知道它们之间的区别。到目前为止我所知道的是我们 FirstOrDefaultAsync()
得到第一个给定的条件,(通常使用这个因为我们知道不止一个项目可以满足条件),另一方面我们使用SingleOrDefaultAsync()
因为我们知道只能找到一个可能的匹配项,而 FindAsync()
可以在给定主键的情况下获取项目。
我认为 FirstOrDefaultAsync()
& SingleOrDefaultAsync()
总是命中数据库(对此不确定),而 FindAsync()
这是Microsoft 文档中的内容:
Asynchronously finds an entity with the given primary key values. Ifan entity with the given primary key values exists in the context,then it is returned immediately without making a request to the store.Otherwise, a request is made to the store for an entity with the givenprimary key values and this entity, if found, is attached to thecontext and returned. If no entity is found in the context or thestore, then null is returned.
所以我的问题是,如果我们用于 FirstOrDefault()
、SingleOrDefault()
和 FindAsync()
的给定条件是主键, 我们有什么实际区别吗?
我的想法是,第一次使用它们时总是会触发数据库,但是接下来的调用呢?。可能 EFCore 可以使用与 FindAsync()
相同的上下文来获取 FirstOrDefault()
和 SingleOrDefault()
的值,< strong>也许?。
最佳答案
查找异步
In much of the scaffolded code, FindAsync can be used in place of FirstOrDefaultAsync.
单一或默认异步
fetches more data and does unnecessary work. throws an exception if there's more than one entity that fits the filter part.
FirstOrDefaultAsync
doesn't throw if there's more than one entity that fits the filter part.
关于c# - FirstOrDefaultAsync() & SingleOrDefaultAsync() 与 FindAsync() EFCore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54819705/
使用 2.0 驱动程序,以下代码有时会挂起并且永远不会返回。 public async Task GetFirst(FilterDefinition query) { return await
我在使用 FirstOrDefaultAsync 时遇到问题抛出 InvalidCastException当尝试从我的数据库中获取一行时。如果我切换到FirstOrDefault如果没有异步,那么它可
当使用 ASP.NET 标识并将 UserStore 自定义为我自己的一组数据库表时,使用 entity framework 就像这样 public Task FindByNameAsync(stri
我创建了一个 .NET Core API ,其中我的所有方法都是异步的,但有一个要求,如 GetBalance() 只返回一个实体(记录)。 我无法使用 SingleOrDefaultAsync(),
我们有 3 种不同的方法从 EFCore 获取单个项目,它们是 FirstOrDefaultAsync()、SingleOrDefaultAsync()(包括没有返回默认值的版本,我们也有FindAs
我正在编写一段使用 .FirstOrDefaultAsync() LINQ 方法的代码。我知道通常如果你在一个表达式中使用它,使用 none async 方法,然后使用 ? 返回而不评估其余的方法调用
我正在使用以下内容制作 Web 应用程序 - ASP.NET 核心 Entity Framework 核心 SQlite 数据库 Angular SPA(ng 7) 我制作了一个名为 User 的模型
我是一名优秀的程序员,十分优秀!