我的 SQL Server 中有一个基于两列(AbsoluteCounter、TimeMfrAudit)的唯一键约束。如果我尝试通过实体框架添加对象列表,我如何检查我的一个对象是否会违反此约束而不会引发会使我的整个 context.SaveChanges() 失败的异常?我在这里寻找最佳实践。
谢谢
我的 SQL Server 中有一个基于两列(AbsoluteCounter、TimeMfrAudit)的唯一键约束。如果我尝试通过实体框架添加对象列表,我如何检查我的一个对象是否会违反此约束而不会引发会使我的整个 context.SaveChanges() 失败的异常?我在这里寻找最佳实践。
谢谢
这些将是违反唯一键约束的所有对象:
var violatingObjects = listOfObjectsToAdd
.Where(o => context.Objects.Any(oInDb =>
oInDb.AbsoluteCounter == o.AbsoluteCounter &&
oInDb.TimeMfrAudit == o.TimeMfrAudit))
.ToList();
它是EXISTS
列表中每个对象的一个数据库查询。如果您只想知道违反约束的第一个对象,请使用FirstOrDefault()
而不是ToList()
. 如果您只想知道是否有任何违规对象,请使用Any()
而不是ToList()
. 当找到第一个对象时,迭代应该停止。