我们有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文档所说的内容:所以我的问题是,如果给定的
FirstOrDefault()
,SingleOrDefault()
和FindAsync()
使用的条件是主键,那么有什么实际区别吗? 我认为第一次使用它们总是会打到数据库,但是下次调用该怎么办? 。也许EFCore可以使用与
FirstOrDefault()
和相同的上下文来获取SingleOrDefault()
和FindAsync()
的值? 。 最佳答案
FindAsync
SingleOrDefaultAsync
FirstOrDefaultAsync
https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/crud?view=aspnetcore-2.2#singleordefaultasync-vs-firstordefaultasync
关于c# - FirstOrDefaultAsync()和SingleOrDefaultAsync()与FindAsync()EFCore,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54819705/