主キーは一度削除すると再利用できますか?
-
21-08-2019 - |
質問
0x80040237 重複キーを挿入できません。
CrmService を介して MSCRM4.0 のインポート ルーチンを作成しようとしています。この時点まではこれで成功しています。当初は CRM にレコードの主キーを生成させるだけでした。しかし、私のクライアントは、カスタム エンティティのキーを事前定義された値に設定できる機能を望んでいました。これにより、どのようなデータがインストーラーによって作成されたのか、またどのようなデータがインストール後に作成されたのかを知ることができる可能性があります。
CrmService.Update() メソッドを呼び出すときに GUID を設定できることを確認するためにテストを行ったところ、希望の値でレコードが作成されたことがわかりました。インポートを実行したところ、すべてが成功したように見えました。インポート ファイルの検証コードを変更する際に、(crm ブラウザ インターフェイスを介して) データを削除し、再インポートしようとしました。残念ながら、現在は重複キーエラーがスローされます。
なぜこのエラーがスローされるのでしょうか?Crm インターフェースはレコードを削除しますか、それともまだ存在しますがユーザーの目からは隠されていますか?削除されたレコードが完全に削除され、Guid が無料になることを保証する方法はありますか?実際の環境では、これらの GUID は存在しませんでしたが、開発中にこれらのインポートを成功させる必要がありました。
ところで、この問題が発生していることを考慮すると、これは GUID を静的に設定することは推奨されないことを意味するのでしょうか?
解決
私の知る限り、エンティティは論理的に削除されているため、ユーザー (または削除サービス) がデータベースからエンティティを削除しない限り、その GUID を再利用することはできません。
たとえば、LeadBase テーブルには DeletionStateCode というフィールドがあります。値 0 はレコードが削除されていないことを意味します。
値 2 は、レコードに削除のマークを付けます。これらのレコードをテーブルから物理的に削除するために、2(?) 時間ごとに実行される削除サービスがあります。
他のヒント
Zahir の言うことが正しいと思います。削除サービスを実行して、もう一度試してください。ここにいくつかの情報があります: http://blogs.msdn.com/crm/archive/2006/10/24/purging-old-instances-of-workflow-in-microsoft-crm.aspx
ザヒルは正しい。
レコードをインポートして削除した後、選択した時間に削除サービスを開始できます。 このツール. 。これにより、インポートと再インポートのテストが容易になります。