4

私はこれで本当に頭を悩ませています。Dynamics CRM SDK を使用してアカウント レコードを更新しようとしています。何をしようとしても、失敗しています。ここに行きます。

Account sampleAccount = CrmAccount.GetAccountsBySubmissionCode(crmService, "ERZZUP").Single<Account>();
sampleAccount.Name = "AMC Edited";
crmService.Update(sampleAccount);

次のエラーが表示されます: EntityState は null、Created (作成メッセージの場合)、または Changed (更新メッセージの場合) に設定する必要があります

XrmServiceContext ctx = new XrmServiceContext(crmService);
Account sampleAccount = CrmAccount.GetAccountsBySubmissionCode(crmService, "ERZZUP").Single<Account>();
sampleAccount.Name = "AMC Edited";
ctx.UpdateObject(sampleAccount);
ctx.SaveChanges();

エラーが表示されます:コンテキストは現在、'アカウント' エンティティを追跡していません。

XrmServiceContext ctx = new XrmServiceContext(crmService);
Account sampleAccount = CrmAccount.GetAccountsBySubmissionCode(crmService, "ERZZUP").Single<Account>();
sampleAccount.Name = "AMC Edited";
ctx.Attach(sampleAccount);
ctx.UpdateObject(sampleAccount);
ctx.SaveChanges();

エラーが表示されます: 「アカウント」エンティティは既にコンテキストに関連付けられています。

参考までに、 1. Account オブジェクトは SDK Early Bound Code Generation Tool によって作成されます 2. crmService は IOrganizationService 接続オブジェクトです 3. GetAccounts ... LINQ クエリを実行し、IEnumerable を返します

助けてください。ありがとう、クリス。

4

1 に答える 1

4

http://msdn.microsoft.com/en-us/library/gg695783.aspx、特に「複数のデータ コンテキスト」の部分を参照してください。エンティティを追跡するために複数のコンテキストを使用しているようです。CrmAccount.GetAccountsBySubmissionCodeメソッドはこれをあなたから隠しているだけです。

CrmAccount.GetAccountsBySubmissionCodeを返す前にメソッド内でコンテキスト/サービスを破棄IEnumerable<Account>するか、同じコンテキスト/サービスを に使用していることを確認してくださいUpdate

于 2012-04-18T19:30:29.513 に答える