gpt4 book ai didi

c# - Microsoft Sync Framework 唯一索引错误

转载 作者:行者123 更新时间:2023-12-03 14:31:36 26 4
gpt4 key购买 nike

我使用 MS Sync Framework 将我的 SQL Server 实例与本地 SQL CE 文件同步,使其能够与我的 Windows 应用程序脱机工作。
我使用 GUID 作为键。我的 table 上有一个 唯一索引 在 2 列上:user_idsetting_id :

usersettings table
------------------
id PK -> I also tried it without this column. Same result
user_id FK
setting_id FK
value
现在我执行以下操作:
我在两个数据库中的这个表中创建了一个新记录 - SQL Server 和 SQL CE 具有相同的 user_idsetting_id .
这应该可以工作并将数据合并在一起,因为这可能发生在现实生活中。但是在同步时出现错误,说唯一键约束导致错误。 key 对已存在于表中。

A duplicate value cannot be inserted into a unique index. [ Table name = user_settings,Constraint name = unique_userid_settingid ]


为什么 MS 同步不能处理?它不应尝试再次插入 key 对。如果需要,它应该更新值。

最佳答案

问题是,如果您将相同的 key 对添加到表的不同副本,它们将获得不同的 ID (GUID) 作为此用户设置表中的主键。
由于这只是用户和设置之间的多对多表,因此不需要将该 ID 作为 PK(甚至根本不需要列)。
相反,只需使用两个 FK 的串联 key ,例如,

CREATE TABLE [dbo].[usersettings](
[user_id] [UNIQUEIDENTIFIER] NOT NULL,
[setting_id] [UNIQUEIDENTIFIER] NOT NULL,
[value] [varchar](50) NOT NULL,
CONSTRAINT [PK_usersettings] PRIMARY KEY CLUSTERED ([user_id] ASC, [setting_id] ASC) );
当然,包括适当的字段设置(例如,如果您使用 VARCHAR 来存储 ID)和相关的 FK。
由于插入的行现在应该在两个副本上相同,因此应该可以很好地合并。
如果您必须将单个列作为表的唯一标识符,则可以使其有意义,例如,
  • PK (ID) 变成 varchar (72)
  • 它充满了 CONCAT(user_ID, setting_id)

  • 由于 User_ID 和 Setting_ID 是 FK,您应该已经生成了它们,因此连接它们应该很容易。

    关于c# - Microsoft Sync Framework 唯一索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64401470/

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