1

0x80040237 无法插入重复键。

我正在尝试通过 CrmService 为 MSCRM4.0 编写一个导入例程。到目前为止,这一直是成功的。最初我只是让 CRM 生成记录的主键。但是我的客户希望能够将自定义实体的键设置为预定义的值。这可能使我们知道安装程序创建了哪些数据,以及安装后创建了哪些数据。

我进行了测试以确保在调用 CrmService.Update() 方法时可以设置 Guid,结果表明记录是使用我们想要的值创建的。我运行了我的导入,一切似乎都很成功。在修改导入文件的验证码时,我删除了数据(通过crm浏览器界面)并尝试重新导入。不幸的是,现在它抛出了一个重复的键错误。

为什么会抛出这个错误?Crm 界面是否删除了记录,或者它仍然存在但隐藏在用户眼中?有没有办法确保已删除的记录被永久删除并且 Guid 变得免费?在实际环境中,这些 Guid 永远不会存在,但在我的开发过程中,我需要这些导入成功。

顺便说一句,考虑到我遇到了这个问题,这是否意味着静态设置 Guids 不是推荐的做法?

4

3 回答 3

6

据我所知,实体是软删除的,因此除非您(或删除服务)将实体从数据库中删除,否则无法重用该 Guid。

例如,在 LeadBase 表中,您会发现一个名为 DeletionStateCode 的字段,值为 0 表示该记录尚未被删除。

值 2 标记要删除的记录。有一个删除服务每 2(?)小时运行一次,以从表中物理删除这些记录。

于 2009-07-02T07:16:47.850 回答
1

我认为 Zahir 是对的,尝试运行删除服务并重试。这里有一些信息:http: //blogs.msdn.com/crm/archive/2006/10/24/purging-old-instances-of-workflow-in-microsoft-crm.aspx

于 2009-07-02T11:33:58.003 回答
0

查希尔是正确的。

导入和删除记录后,您可以使用此工具在您选择的时间启动删除服务。这将使测试导入和重新导入变得更加容易。

于 2009-07-02T12:51:23.090 回答