gpt4 book ai didi

c# - 独特的约束黑客 - Entity Framework

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:19 26 4
gpt4 key购买 nike

由于在当前最新的 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.");

最佳答案

如果这种情况很少见,那么在数据库上设置唯一约束并捕获在您尝试插入现有记录时生成的异常并没有错。

如果这种情况很可能发生很多,那么我仍然会在数据库上施加约束,但请按原样进行检查。

FWIW,您应该让您的方法采用 Expression<Func<T, bool>>这样查询就不会转换为 Enumerable。

关于c# - 独特的约束黑客 - Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com