【发布时间】:2017-08-24 15:04:12
【问题描述】:
我在 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
我正在使用实体框架,从数据库加载对象,进行更改,然后调用 SaveChanges。
我收到异常:“违反 UNIQUE KEY 约束 'UQ_TableA_Constraint1'。无法在对象 'dbo.TableA' 中插入重复键。”
据说,SaveChanges 在事务中被调用。 EF Source 似乎表明它是,失败的更新是原子的这一事实表明这是有效的。但是,更新似乎也是逐行完成的,即使在事务内部也是如此。因此,EF 首先对记录 1 执行更新,这会暂时产生重复的唯一键。
有没有办法缓解这种情况?我宁愿不更新到临时值,调用 savechanges,然后更新到正确的值,因为这可能会失败并使数据处于不正确的状态。
有什么选择吗?
【问题讨论】:
标签: sql entity-framework