处理表架构
本主题介绍了可用来处理在客户端数据库和对等数据库中创建的表架构的几种方法。
客户端与服务器同步
在客户端的初始同步会话期间,Sync Framework 创建客户端数据库中的表。有关更多信息,请参见如何初始化客户端数据库和处理表架构。创建这些表后,允许进行一些架构变更。
Sync Framework 不会将架构变更从服务器自动传播到客户端。有关如何处理服务器上的架构变更的信息,请参见应用程序的部署和版本控制。支持在客户端数据库中进行以下架构变更:
删除表。在下一次同步期间的行为取决于为 CreationOption 指定的值。如果根本不希望该表位于客户端上,请将其从 SyncTableCollection 中删除。如果删除的表已经启用了变更跟踪,还应删除跟踪该表的删除操作的系统表。因此,自上一次同步以来的所有删除操作都不会上载到服务器。
添加新列。
删除快照同步涉及的表列。其他同步类型不支持此变更。
添加、删除和重命名索引。
添加、删除和重命名主键及其他约束。
修改默认值。
不支持进行所有其他变更,而且这些变更可能会导致同步失败。
在某些应用程序中,客户端和服务器上的架构存在差异。以下总结了表和 Sync Framework 用于在客户端更新该表的 ADO.NET 数据集的行为:
如果数据集包含 Column1 和 Column2,表中包含 Column1、Column2 和 Column3:将应用 Column1 和 Column2 中的值,而 Column3 将设置为其默认值或者 NULL(如果该列没有默认值)。
如果数据集包含 Column1、Column2 和 Column3,表中包含 Column1 和 Column2:将应用 Column1 和 Column2 中的值,而会忽略 Column3。
如果数据集包含 Column1、Column2 和 Column3,表中包含 Column1、Column2 和 Column4:将应用 Column1 和 Column2 中的值,而 Column3 将设置为其默认值或者 NULL(如果该列没有默认值),忽略 Column4。
对等同步
对等同步不提供对等数据库的自动初始化功能或在每个对等方创建变更跟踪基础结构的功能。有关架构和数据初始化的信息,请参见如何配置和执行协作同步(非 SQL Server)中的“初始化服务器数据库”。对于对等数据库中基表的架构变更,不存在任何限制。但是,如果架构发生变更,应用程序必须确保更新用于选择和应用变更的命令。例如,如果向表中添加了一个列,则必须更新用于将变更信息插入该表的命令,以便包括这一新列。
在对等方案中,架构在对等数据库之间可能不同。例如,第一个对等方的表架构可能使用不易读的数字列名称。您可以使用 DbSyncColumnMapping 和 DbSyncColumnMappingCollection 对象将这些列映射到其他对等方的更友好名称。