Ошибка обновления CRM 2011 LINQ

У меня возникли проблемы с поиском 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: 

person GoBeavs    schedule 10.08.2012    source источник
comment
Вы пробовали использовать account.name = "Microsoft"; ?   -  person Paul Way    schedule 10.08.2012
comment
Можете ли вы опубликовать остальные детали исключения? Он обрывается на «Внутреннем исключении» — нельзя ли добавить туда больше деталей?   -  person glosrob    schedule 10.08.2012
comment
это может иметь значение   -  person keerz    schedule 11.08.2012


Ответы (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();

Это эффективно создает копию ссылки на учетную запись только с теми полями, которые вы хотите обновить.

person Alec    schedule 10.08.2012