问题

问题:对关系(其中 objectid 为主键)进行的编辑内容可能与双向复制和单向复制错误同步

Last Published: January 8, 2021

描述

关系的主键可以基于地理数据库维护的 GlobalID、应用程序或客户维护的主键或者地理数据库维护的 objectid。 在某些用例中,当关系的主键基于 objectid (OID) 列时,可能会错误地同步涉及关系的编辑内容。

注: 本文仅适用于 ArcGIS 9.x 版本。 更高版本的 ArcGIS 可能包含不同的功能,对于菜单、命令和地理处理工具,可能具有不同的名称和位置。

以下是一个错误地同步编辑内容的示例用例。

考虑一个示例,其中双向复本中存在 poles 要素类和 transformers 表。 在此示例中,poles 和 transformers 之间存在简单关系类。 Poles 为源类,主键为其 objectid 列。 Transformers 为目标类,外键为长整型列 poleid。

下面将介绍一个未正确同步关系的用例。

  1. 将新电线杆 (objectid = 10) 添加至主复本地理数据库。
  2. 将新变压器 (objectid = 100) 添加至主复本。
  3. 然后,将复本从主复本同步至辅助复本,由此可将新的电线杆和变压器添加至辅助复本。 分配给辅助复本中的新电线杆的 objectid 为 12。 这是因为辅助复本中的另一个要素已使用 objectid 10。 分配给新变压器的 objectid 为 105。 这些行的 GlobalID 将与主要地理数据库中的相应值相同,用于维护要素之间的后续对应关系。
  4. 在主复本中,将在 objectid 为 10 的宗地和 objectid 为 100 的变压器之间添加新关系。 由此可将变压器行中嵌入的 poleid 值(外键)设置为 10。
  5. 再次将复本从主复本同步至辅助复本。 对主地理数据库中的变压器行进行的更改将应用于 objectid 为 105(使用 GlobalID 来建立对应关系)的辅助地理数据库中的变压器行。 但是,辅助变压器行中 poleid 的更新值错误。 它已更新为 10,但应为 12。

如果在最初创建了电线杆和变压器的同一编辑内容生成中进行了用于在电线杆和变压器之间创建关系的编辑内容,则上述示例将正常运行。 例如,如果在步骤 3 中的同步之前已创建该关系。 同步算法将记录创建时电线杆 objectid 的变化,并使用其以正确更新变压器中的外键。

有关正确同步编辑内容的用例的注意事项:

正确同步编辑内容的用例对应于具有关联要素的注记的常见工作流,这些注记基于作为主键的 objectid。 最常见的工作流涉及在同一编辑会话中创建要素及其链接的注记。 为要素创建注记后,其与该要素的关系在后续编辑内容中将不会更改。 并非所有涉及关联要素的注记的工作流都受支持。 例如,不支持在不涉及创建要素的生成中为要素创建新的相关注记。 受支持的工作流依赖于 ArcGIS 9.2 Service Pack 5。

原因

在某些用例中(请参阅以上“描述”部分),当关系的主键基于 objectid (OID) 列时,涉及关系的编辑内容可能会错误地与双向复制和单向复制同步。

解决方案或解决方法

此问题已在 ArcGIS 9.2 Service Pack 6 和 ArcGIS 9.3 中得到解决。 以下 ArcGIS 9.2 Service Pack 6 patchArcGIS 9.3 Service Pack 1 中还解决了其他情况。

此外,当使用在所有数据库中唯一的 GlobalID 列或客户定义的主键(例如 EquipmentID)作为关系中的主键以编辑并同步与双向和单向复本的关系时,也不会遇到此问题。

在以上错误同步编辑内容的示例中,已使用 poles 中的 globalid 列作为主键,transformers 中的 guid 列为外键来定义关系类。 使用 globalid 作为主键的关系类需要 guid 列作为外键。 在此用例中,由于复本之间的 globalid 和 guid 值相同,因此已正确同步该关系。

文章 ID:000009966

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

相关信息

发现关于本主题的更多内容