gpt4 book ai didi

c# - 无法使用 EF 交换两行上的唯一值

转载 作者:太空狗 更新时间:2023-10-29 23:13:58 27 4
gpt4 key购买 nike

我正在尝试将唯一列中的值交换为两行(或更多行)。例如:

更新前:

  • 第 1 行 = 1
  • 第 2 行 = 2

更新后:

  • 第 1 行 = 2
  • 第 2 行 = 1

我正在使用 Entity Framework 。这些更改发生在同一上下文的单个提交上。但是,当我尝试此更新时,我总是遇到唯一的约束冲突。 EF没有使用事务吗?

为了完整起见,这里是我的表格设计的一个片段:

[FeeSchemeId] UNIQUEIDENTIFIER NOT NULL,
[SortPosition] INT NOT NULL,
UNIQUE (FeeSchemeId, SortPosition)

我正在尝试更新“SortPosition”列。此处显示的代码有点复杂,但我可以向您保证,它与单个最终提交的上下文相同。仅当 EF 尝试写入数据库时​​才会引发错误。

更新:

-<删除>使用 SQL Server Profiler,我可以看到 EF 正在为每个受影响的行运行单独的更新。 EF 不应该对 SaveChanges() 的一次调用使用单个事务吗?-

更新 2:

事实证明 EF 毕竟使用的是单个事务。 SQL Profiler 正在过滤掉它。

最佳答案

你不能用 SQL Server 也用 2 条语句来做到这一点。你需要使用第三个值

BEGIN TRANSACTION;
UPDATE MyTable Set Id = 200 where Id = 1;
UPDATE MyTable Set Id = 1 where Id = 2;
UPDATE MyTable Set Id = 2 where Id = 200;
COMMIT;

顺便说一句,SQL Server 分析器显示 BEGIN TRANSACTION/COMMIT 语句

关于c# - 无法使用 EF 交换两行上的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151817/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com