SQLServerCE / 本地数据缓存 / 同步框架 - 插入错误

Posted

技术标签:

【中文标题】SQLServerCE / 本地数据缓存 / 同步框架 - 插入错误【英文标题】:SQLServerCE / Local Data Cache / Sync Framework - Insert Error 【发布时间】:2009-06-09 13:09:31 【问题描述】:

希望有人可以帮助我。我有一个 Visual Studio 2008 WinForms 我添加了本地数据缓存的应用程序。本地数据缓存是 通过 SqlServerCE 使用 SDF 文件并缓存 SQL Server 2008 数据库 更改跟踪已启用。

这是可行的,我可以进行双向同步等。

我遇到的问题是将数据插入到本地表中 已由 VS 向导创建。当我尝试插入数据时 以编程方式甚至通过 VS 界面(显示数据)我得到一个错误 声明“无法将重复值插入唯一索引”,因为 主键约束。

这些表有一个 auto int int 主键,看起来种子有 被重置回一。这不会发生在所有的桌子上,只有一个 很少。

有什么办法可以解决这个问题吗?

问候, 亚当

【问题讨论】:

【参考方案1】: 能否发布相关表的服务器 DDL 语句? 如何在客户端上创建主键?错误消息说您正在尝试在表中再次插入相同的 PrimaryKey。 也可以考虑sqlce does not support server generated keys

【讨论】:

【参考方案2】:

我遇到了同样的问题,并将 Int/auto-incremental 值替换为 GUID。对我有用。

【讨论】:

【参考方案3】:

我遇到了同样的问题。我通过将每个表上的每个主键设置为GUID 来修复它。这样,当在离线环境中的客户端上创建记录,然后与服务器同步回来时,客户端/服务器主键之间就不会发生冲突。这也可以防止与 IDENTITY 属性在每个 INSERT 上自动递增到已经存在的值的冲突。

如下图所示,数据类型设置为nvarchar(50)(可以是任何类似字符串的数据类型),默认值设置为(newid()),身份规范设置为@987654328 @。

SQL Server Management Studio 中的 GUID 属性屏幕截图:

您可以从Microsoft's documentation 阅读有关GUID 数据类型的更多信息,看看它们是否适合您的特定场景。

【讨论】:

以上是关于SQLServerCE / 本地数据缓存 / 同步框架 - 插入错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VS2012 中创建本地数据库缓存?

同步服务实际上并未同步

使用同步框架自动更新到 SQL Server CE 本地数据库

SyncFrameworkToolkit + SqlServerCE + 实体框架示例

SQL Server CE 与远程 Access 数据库双向同步

将本地 Firestore 缓存与服务器显式同步