由于没有任何方法可以在当前最新的 EF 版本中为实体添加唯一约束,所以我想出了一个主意。(我知道可以通过嵌入 SQL 添加约束)
我在我的 Repository 类中添加了一个方法:
private IDbSet<T> Entities;
public virtual bool Contains(Func<T, bool> predicate)
{
return Entities.Any(t => predicate(t));
}
我认为这将取代我目前的重复预防逻辑:
bool already exists = (from t in someSet.Entities
where t.UniqueColumn == entity.UniqueColumn select t).
FirstOrDefault() != null;
if(alreadyExists)
throw new Exception("Entity already exists in DB.");
这是一个好主意,防止重复插入/更新数据库的最佳方法是什么?
编辑:我编辑了 Contains 方法以使用谓词。现在我可以写这样的代码:
if(repository.Contains(t=> t.Email == "someemail@email.com")
throw new Exception("Email already exists.");