我真的很撓我的頭。我正在嘗試使用Dynamics CRM SDK來更新帳戶記錄。無論我嘗試什麼,都失敗了。開始。動態CRM保存實體更改 - 獲取錯誤
Account sampleAccount = CrmAccount.GetAccountsBySubmissionCode(crmService, "ERZZUP").Single<Account>();
sampleAccount.Name = "AMC Edited";
crmService.Update(sampleAccount);
給出了錯誤:EntityState必須設置爲null,創建日期(用於創建消息)或更改(更新消息)
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.帳戶目的是通過早期綁定代碼生成工具 2. crmService的SDK創建是IOrganizationService連接對象 3. GetAccounts ...執行LINQ查詢並返回一個IEnumerable
請幫忙。感謝, 克里斯。
你說得對,在GetAccounts ....方法中存在上下文。但是,我現在在返回IEnumerable之前在上下文中調用Dispose(),並且仍然出現錯誤。 – 2012-04-18 19:38:06
好的。玩得更多,移動LINQ修復它。我將重構我的方法以傳遞現有的上下文以供使用。感謝您的指示,這真的很有幫助。 – 2012-04-18 19:48:30
處理上下文的更健壯的方式是使用'使用(var context = new XrmServiceContext()){// code}'塊。在using塊之前聲明IEnumerable,在using塊中分配結果並返回結果。 –
2012-04-18 19:53:05