小编Die*_*nio的帖子

FirstOrDefaultAsync()和SingleOrDefaultAsync()与FindAsync()EFCore

我们有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);
Run Code Online (Sandbox Code Playgroud)

我想知道它们之间的区别。到目前为止,我所知道的是我们FirstOrDefaultAsync()得到第一个给定的条件(通常使用此条件是因为我们知道一个以上的条件可以满足该条件),另一方面,我们使用的 SingleOrDefaultAsync()是因为我们知道只有一个可能的匹配条件查找,并FindAsync()获得具有其主键的项目。

我认为FirstOrDefaultAsync()SingleOrDefaultAsync()总是访问数据库(对此不确定),FindAsync()这就是Microsoft文档所说的:

异步查找具有给定主键值的实体。如果上下文中存在具有给定主键值的实体,则将立即返回该实体,而无需向商店提出请求。否则,将向商店请求具有给定主键值的实体,如果找到该实体,则将该实体附加到上下文并返回。如果在上下文或存储中未找到任何实体,则返回null。

所以我的问题是,如果我们的给定条件用于FirstOrDefault()SingleOrDefault()并且FindAsync()是主键,那么我们有什么实际区别吗?

我认为第一次使用它们总是会命中数据库,但是下次调用该怎么办?。大概EFCore可以使用相同的情况下获得的值FirstOrDefault(),并SingleOrDefault()因为它的FindAsync()也许?

c# linq ef-core-2.0

6
推荐指数
2
解决办法
1624
查看次数

本地功能和SOLID原则C#

我知道从C#7.0开始我们可以创建本地函数,但是如何通过SOLID原则来实现一个好的设计模型呢?

我的意思是,这不会破坏单一责任原则,在另一个功能中添加一个功能吗?

我们可以委托在另一个方法或另一个新类中计算这个简单的任务吗?而对于Open-Closed原则,它允许我继承SomeClass来修改它现在更复杂,我现在需要重写整个基函数而不仅仅是我的代码的一部分?

可能我们只需要重新编写方法的某些部分而不是改变它的整个功能.

.net c# solid-principles c#-7.0

4
推荐指数
2
解决办法
586
查看次数

标签 统计

c# ×2

.net ×1

c#-7.0 ×1

ef-core-2.0 ×1

linq ×1

solid-principles ×1