我遇到了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:
答案 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();
这有效地创建了帐户参考的副本,只包含您要在其中更新的字段。