删除后可以重复使用Primary-Keys吗?

时间:2009-07-02 06:01:52

标签: import primary-key duplicates dynamics-crm dynamics-crm-4

0x80040237无法插入重复密钥。

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

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

为什么会抛出此错误? Crm接口是否删除了记录,或者它是否仍然存在但是隐藏在用户眼中?有没有办法确保永久删除已删除的记录并使Guid免费?在现场环境中,这些Guids永远不会存在,但在我的开发过程中,我需要这些导入才能成功。

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

3 个答案:

答案 0 :(得分:6)

到目前为止,我可以告诉实体被软删除,因此除非您(或删除服务)将实体从数据库中删除,否则无法重用该Guid。

例如,在LeadBase表中,您将找到一个名为DeletionStateCode的字段,值为0表示该记录尚未删除。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Zahir是对的。

导入和删除记录后,您可以在使用this tool选择时启动删除服务。这样可以更轻松地测试导入和重新导入。