c# - 如何使用 EF5 和存储库检查给定 ID 的记录是否已存在

标签 c# linq entity-framework-5

对于我的项目,我使用 Entity Framework 5Code First,通过存储库和 UnitOfWork 使用它。

当我编辑/更新实体时,我想确保该实体存在于数据库中。我不确定这必须如何完成。首先,我想到查询具有此 ID 的实体,并检查结果是否为 null(未找到具有此 ID 的实体),并将我的逻辑基于此。

然后我认为这可能不是最好的方法,所以现在我使用这个:

if (unitOfWork.EntityRepository.GetAll().Any(r => r.EntityID == model.EntityID))

GetAll 在我的 Repository 中实现为:

    public virtual IQueryable<TEntity> GetAll()
    {
        return dbSet;
    }

我不确定使用 Any() 和仅仅尝试通过给定 ID 获取记录之间是否有很大的区别,在这两种方式中我需要查询数据库(我认为)。但由于这是我必须在代码中常见的事情,所以我想知道到底该怎么做。

最佳答案

应该是相等的。

EF 提供程序的 Any()FirstOrDefault() LINQ 表达式之间的区别在于,前者会生成 SQL EXISTS(... ) 子句,后者位于简单的 WHERE ... 中。只要您查询索引列,这两者都非常快(并且可以互换)。

关于c# - 如何使用 EF5 和存储库检查给定 ID 的记录是否已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514270/

相关文章:

c# - 需要一些指导来使用 C# 制作 GUI 计算器吗?

linq - 如何在 T4 模板中使用 Linq?

asp.net-mvc-4 - Entity Framework 代码优先多对多关系和继承

c# - Entity Framework 代码首先使用 Where 子句更新

c# - Win API - 如何启动桌面程序?

c# - 从 DataReader 对象中查找 Field 的数据类型

c# - 使用反射获取通用 Dictionary <,> 的键值

c# - 验证是否使用 moq 调用 linq 扩展方法

c# - 如何排序 List<Point>

c# - 在 Entity Framework 中处理主数据表和相关表