【发布时间】:2018-09-05 16:51:19
【问题描述】:
我有一个具有复合唯一性的表,我会允许用户交换序列号,但 SQL 会引发唯一键冲突。大概是因为每行更改后都会检查违规行为
public class RateCodes
{
public int Id { get; set; }
//Unique Composite Key Field 1
public int Sequence { get; set; }
//Unique Composite Key Field 2
public int DivisionId { get; set; }
public Decimal RateCode { get; set; }
}
在我们的客户端中,我们希望允许用户重新排列其费率代码的顺序。
但是当我执行更新时出现异常
“System.Data.Entity.Infrastructure.DbUpdateException:更新条目时出错。详情请参阅内部异常。
System.Data.Entity.Core.UpdateException:更新条目时出错。有关详细信息,请参阅内部异常。
System.Data.SqlClient.SqlException:违反唯一键约束“UX_RateCodes_Sequence”。无法在对象“dbo.RateCodes”中插入重复键。重复键值为 (346, 3)
尽管我一次保存了所有数据,但 SQL 引发了唯一违规,因为 SQL 在更新所有数据之前执行唯一键验证。
我不想在保存之前删除我的数据,因为其他应用程序可能正在对表进行操作,而我可能没有当前应用程序中的所有数据。我该如何解决这个问题?
【问题讨论】:
-
为什么不更新现有记录而不是插入新记录然后删除旧记录?
-
@Marathon55 我正在更新现有记录,他们正在抛出一个独特的错误,因为 SQL 在更新所有数据之前执行唯一密钥验证,尽管一次保存了所有数据
-
您使用的是
UpdateRange方法吗?如果是这样,也许您可以循环并一次更新它们。 -
@Marathon55 循环遍历它们会导致同样的问题
-
所以你有一个现有的记录,Id=346 和 Sequence=3。您想更改该记录的 RateCode 值,对吗?
标签: c# sql entity-framework