我在Entity Framework 6和SQL Server中遇到了一个有趣的问题。
我们有一个带有复合键的表。这是一个例子;
ID Col1 Col2
-- ---- ----
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
因此,Col2对于每个Col1都是唯一的。我需要交换2个值来产生这个期望的结果......
ID Col1 Col2
-- ---- ----
1 1 2
2 1 1
我正在使用Entity Framework,从数据库加载对象,进行更改,并调用SaveChanges。
我收到异常:“违反UNIQUE KEY约束'UQ_TableA_Constraint1'。无法在对象'dbo.TableA'中插入重复键。”
据说,在事务中调用SaveChanges。 EF Source似乎表明它是,并且更新失败是原子的事实表明这是有效的。但是,即使在交易中,似乎ROW BY ROW也会完成更新。因此,EF首先对记录1执行更新,暂时产生重复的唯一密钥。
有没有办法减轻这个?我宁愿不更新为临时值,调用savechanges,然后更新为正确的值,因为这可能会失败并使数据保持不正确状态。
有没有选择?
答案 0 :(得分:0)
我希望我理解你的问题 在事务内部也必须满足约束,这是SQL Server(和其他DBMS)行为而不是EF行为 您可以在事务中使用临时值以确保一切顺利 如果您需要运行更新查询(在多个记录上),您可以使用外部库https://github.com/loresoft/EntityFramework.Extended(但如果我理解您的问题,您将无法解决约束问题)。