0

我有一个简单的表格,其中包含以下内容:

ID  MarketID Lead
1   1        true
2   1        false
3   2        true
4   2        false

它是一个成对值的表,所以模式是总是有两行具有相同的 MarketID,但一个必须为假 (0),一个必须为真 (1)。这是通过按预期工作的唯一键约束(确保 MarketID 和 Lead 组合是唯一的)强制执行的。

但是,我希望用户能够更改“Lead”列并切换值。

在我调用 SubmitChanges 之前,我的工作正常:

table.AttachAll(updated);
table.Context.Refresh(RefreshMode.KeepCurrentValues, updated);
table.Context.SubmitChanges();

更新的地方是两个更改的行

快速查看 SQL Profiler 显示 SQL Server (2008) 正在逐行更新,因此它首先将 true 值更新为 false,但在将第二行的 false 值更改为 true 之前,它会导致中断并失败, 因为现在两者都设置为 false。

有人知道解决这个问题的方法吗?

4

1 回答 1

0
  1. 暂时禁用和重新启用 UNIQUE 约束。

  2. 暂时允许 IDENTITY INSERTS,然后删除并重新创建这两行。

  3. 暂时允许 IDENTITY INSERTS,然后更新ID两行的值。ID(如果列具有 UNIQUE 约束,这可能是一个 3 步过程)

  4. 在列中允许 NULL Lead,并在切换一行然后另一行时使用 NULL 临时绕过 UNIQUE 约束。

...如果我想到其他任何我会在以后添加它们。

于 2018-08-15T14:57:00.943 回答