我有一个如下所示的表:
TABLE Foo
{
Guid Id [PK],
int A [FK],
int B [FK],
int C [FK],
}
以及对 A、B 和 C 的唯一约束。
现在举例来说,您插入带有新 PK 的行,其中 A = 1、B = 1、C = 1。
SubmitChanges()
,皆大欢喜。
现在您编辑该表。
您删除之前的条目,并插入一个 fresk PK 为 A = 1、B = 1、C = 1 的行。
SubmitChanges()
繁荣!唯一键约束 SQL 异常。
据我所见,它尝试首先插入新记录,然后尝试删除前一条记录。我什至可以理解,不可能确定这需要发生的顺序。
但我能做什么呢?将这 3 个字段设为复合 PK(并删除旧字段)会是更好的解决方案还是根本不起作用?
目前,“解决方案”是从数据库中删除唯一约束(但我宁愿不这样做)。
一种选择是创建一个事务(连接绑定事务,或者TransactionScope
) - 删除记录并SubmitChanges
,添加记录并SubmitChanges
,然后最后提交事务(或者如果崩溃则回滚)。
请注意,您可以通过数据上下文构造函数 IIRC 关联连接绑定事务。TransactionScope
应该也能工作,而且更容易做到——但效率不那么高。
或者,编写一个在数据库中执行此交换作业的 SP,然后访问该 SPvia数据上下文。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)