对于我的项目,我使用 Entity Framework 5
和 Code 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/