CRM 2011 LINQ更新错误

时间:2012-08-10 01:11:39

标签: linq dynamics-crm-2011

我遇到了CRM 2011使用LINQ查找记录然后更新找到的记录的问题。即使这个超级简单的版本也行不通。错误完全是通用的(见下文)。

这是代码,我从查询中得到一个实体,我无法更新它。

var account = orgContext.CreateQuery("account").First(c => c["name"] == "apple");

account["name"] = "Microsoft";

orgContext.UpdateObject(account);
orgContext.SaveChanges();  ///ERROR HERE




ERROR DETAIL

Microsoft.Xrm.Sdk.SaveChangesException was unhandled by user code
  Message=An error occured while processing this request.
  Source=Microsoft.Xrm.Sdk
  StackTrace:
       at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChanges(SaveChangesOptions options)
       at Dhs.Tsa.Trip.Xrm.Plugins.ProcessNFL.Execute(IServiceProvider serviceProvider) in C:\Users\Administrator\Desktop\Dhs.Tsa.Trip.Xrm\Dhs.Tsa.Trip.Xrm.Plugins\ProcessNFL.cs:line 54
       at Microsoft.Crm.Extensibility.V5PluginProxyStep.ExecuteInternal(PipelineExecutionContext context)
       at Microsoft.Crm.Extensibility.VersionedPluginProxyStepBase.Execute(PipelineExecutionContext context)
  InnerException: System.ServiceModel.FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>
       Message=System.InvalidOperationException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #97345966
       Source=Microsoft.Crm.Extensibility
       StackTrace:
            at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Execute(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType)
            at Microsoft.Crm.Extensibility.InprocessServiceProxy.ExecuteCore(OrganizationRequest request)
            at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.Execute(OrganizationRequest request)
            at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.SaveChange(OrganizationRequest request, IList`1 results)
       InnerException: 

1 个答案:

答案 0 :(得分:1)

我不是100%确定该错误所指的是什么,但我知道在过去我尝试使用与检索到的相同对象进行更新时遇到了问题。例如,如果您获取的对象缺少必填字段,则可能不希望您再次尝试将其保存。

无论如何,解决方案很简单。而不是......

account["name"] = "Microsoft";

orgContext.UpdateObject(account);
orgContext.SaveChanges();

尝试做...

var updAccount = new Entity("account") { Id = account.Id };
updAccount["name"] = "Microsoft";

orgContext.UpdateObject(updAccount);
orgContext.SaveChanges();

这有效地创建了帐户参考的副本,只包含您要在其中更新的字段。