我需要定期(即每晚)将外部数据与 CRM 进行单向同步。
这包括创建新记录以及更新现有记录。
这意味着,我必须跟踪由我的同步过程创建的 CRM 实体的 ID。
强调的文本我已经设法从数据库表的行创建和更新 CRM 中的记录,所以这不是问题。
目前,我的映射表有以下列
id
:插入新行时设置的表主键new_myentityid
:映射实体的主要属性,在同步过程创建记录后设置new_name
等:记录属性的值
但是,我看到了一种可以大大简化整个过程的方法:
与其在数据库中使用主键 (id
) 并在单独的列中跟踪 CRM ID (new_myentityid
),不如摆脱id
-columns 并将 CRM-ID-Column (new_myentityid
) 作为表的主键,并在插入新记录时设置它 (newid()
),所以从数据库的角度来看,基本上用 new_myentityid
代替 id
。然后,我可以通过 ExecuteMultipleRequest
结合 UpsertRequest
批量更新插入。
这样,我会在每个映射表中保存一列以及在创建它们后存储 CRM ID 的逻辑。
问题
这是可以接受的还是有什么可以让我避免这种情况的?
最佳答案
免责声明:我不知道这方面的最佳实践,所以这只是我对为 Dynamics 多次开发的问题的个人意见。
我认为使用 CRM 实体 GUID 作为主键是个好主意。它不那么复杂并且在 SQL 中处理得很好。我假设您数据库中的列是 uniqueidentifier
。
我唯一的意见是不要自己生成 GUID。让 CRM 为您生成它们,因为它可以更好地保持所有内容的顺序和索引。
关于c# - 可以在 CRM 之外生成实体 ID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41803567/