Dynamics CRM保存实体更改 - 获取错误

时间:2012-04-18 19:18:30

标签: dynamics-crm dynamics-crm-2011

我真的为此烦恼不已。我正在尝试使用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

请帮忙。 谢谢, 克里斯。

1 个答案:

答案 0 :(得分:4)

请参阅http://msdn.microsoft.com/en-us/library/gg695783.aspx,尤其是“多数据上下文”部分。您似乎正在使用多个上下文来跟踪实体。 CrmAccount.GetAccountsBySubmissionCode方法只是隐藏了这一点。

CrmAccount.GetAccountsBySubmissionCode方法中确保在返回IEnumerable<Account>之前处理上下文/服务,或确保使用相同的上下文/服务Update