Linq2SQL处理具有唯一约束的表上的插入/删除

lep*_*pie 5 .net c# linq linq-to-sql

我有一个如下所示的表:

TABLE Foo
{
  Guid Id [PK],
  int A [FK],
  int B [FK],
  int C [FK],
}
Run Code Online (Sandbox Code Playgroud)

对A,B和C的唯一约束.

现在说,例如,你插入一个新的PK行,其中A = 1,B = 1,C = 1.

SubmitChanges(),都开心.

现在编辑表格.

您删除上一个条目,并插入一个具有F = 1,B = 1,C = 1的fresk PK的行.

SubmitChanges()繁荣!唯一键约束SQL异常.

从我所看到的,它尝试首先插入新记录,然后尝试删除前一个记录.我甚至可以理解,无法确定需要发生的顺序.

但是我能做些什么呢?将这三个领域作为复合PK(并删除旧的)将是一个更好的解决方案或甚至不工作?

目前,"解决方案"是从数据库中删除唯一约束(但我宁愿不这样做).

Mar*_*ell 3

一种选择是创建一个事务(连接绑定事务或 )TransactionScope- 删除记录 和SubmitChanges,添加记录 和SubmitChanges,然后最后提交事务(或者如果崩溃则回滚)。

请注意,您可以通过数据上下文构造函数 IIRC 关联连接绑定事务。TransactionScope应该也能工作,而且更容易做到——但效率不那么高。

或者,编写一个在数据库中执行此交换作业的 SP,并通过数据上下文访问该 SP。