类似于在Entity Framework中检查对象是否存在的最佳方法?
我正在寻找一种通用的方法来检查DbSet
中是否存在实体。例如,像这样不起作用的代码:
private DbContext DbContext { get; set; }
private DbSet<T> DbSet { get; set; }
public Boolean Exists(T entity) {
return ((from item in this.DbSet
where item == entity
select item).Count() > 0);
}
在LINQ to SQL中,where item == entity
是可行的,但在LINQ to Entities中似乎不行。由于实体可能具有不同的键,我不能让它们都从具有已知键的公共抽象类继承以进行比较。
我可以这样做,但我担心捕获异常作为验证过程的性能问题 这也行不通,因为只要实体被分离,就无法获取OriginalValues
属性:
public Boolean Exists(T entity) {
try {
var current = this.DbContext.Entry(entity).OriginalValues;
// Won't reach this line if the entity isn't in the database yet
return true;
}
catch (Exception ex) {
return false;
}
}
Exists()
方法的原因,我想能够创建一个Save()
方法,在其中可以确定实体是需要添加到上下文(INSERT
)还是附加(UPDATE
)。我在问题中没有提到这一点,因为一旦有了Exists()
,Save()
就变得微不足道了。 - Yuck