【发布时间】:2021-01-31 16:51:45
【问题描述】:
我使用 MS Sync Framework 将我的 SQL Server 实例与本地 SQL CE 文件同步,以使其能够与我的 Windows 应用脱机工作。
我使用 GUID 作为键。在我的桌子上,我在 2 列上有一个 唯一索引:user_id 和 setting_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_id 和 setting_id。
这应该可以工作并将数据合并在一起,因为这可能在现实生活中发生。但是当我同步说唯一键约束导致错误时出现错误。密钥对已存在于表中。
不能将重复值插入唯一索引。 [表名=user_settings,约束名=unique_userid_settingid]
为什么 MS 同步不能处理这个问题?它不应该再次尝试插入密钥对。如果需要,它应该更新值。
【问题讨论】:
-
这真的与 ISO/ANSI
语言有关吗? -
既然是关于 SQL 中的唯一键,我会说是的。
-
外键不保证唯一性。
-
同步过程中是否出现错误,那么它应该显示为冲突,您必须在代码中解决。
-
我在手册中也看到了这一点:默认情况下,以下对象不会复制到客户端数据库:FOREIGN KEY 约束、UNIQUE 约束、DEFAULT 约束和 SQL Server ROWGUIDCOL 属性。这表明对您的方案的支持不佳
标签: c# sql sql-server synchronization microsoft-sync-framework