"EntityState должен быть установлен в значение null," Создано "(для" Создать сообщение ") или" Изменено (для сообщения "Обновление" ) при попытке обновления объекта в CRM 2011
Я использую следующий код для обновления объекта.
Service.Update(_policy);
где политика - это класс, сгенерированный с использованием CrmSvcUtil.exe
public partial class new_policy : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged
Я извлекаю политики с помощью LINQ, затем обновляю один атрибут (EntityReference), а затем пытаюсь обновить
При запуске этого кода появляется следующее сообщение об ошибке:
EntityState должен быть установлен в null, Created (для создания сообщения) или Изменено (для сообщения "Обновить" )
Существуют и другие объекты, сгенерированные таким же образом, что я могу обновить.
Я пробовал
_policy.EntityState = EntityState.Changed
но затем я получаю сообщение о том, что
Объект доступен только для чтения, а свойство EntityState не может быть модифицирована. Используйте контекст для обновления объекта.
Кто-нибудь знает, что вызывает это?
Ответы
Ответ 1
Вы должны сообщить своему crmContext
(используйте соответствующее имя), что делать с изменениями.
Вы должны добавить crmContext.UpdateObject(contact); до crmContext.SaveChanges();
См. также Как обновить объект CRM 2011 с помощью LINQ в плагине?
Ответ 2
У меня была та же проблема. Я переключился с
context.Update(object)
to
context.UpdateObject(object)
и это сработало.
Ответ 3
Чтобы избежать проблемы, вы можете просто использовать вспомогательные объекты update вместо использования извлеченной записи:
var policyUpdater = new Policy { Id = _policy.Id, FieldToUpdate = "newValue" };
service.Update(policyUpdater);
Примечание. Свойства объекта-помощника обновления, которые не заданы, просто игнорируются. Обновление не установит соответствующие поля записей в значение null
Ответ 4
Это сработало для меня:
recordToUpdate.EntityState = EntityState.Changed;
(recordToUpdate - это объект, подлежащий обновлению)
Ответ 5
Оказывается, это проблема с моим запросом linq, который извлекал объект в первую очередь. Когда я заменил это выражением запроса, он работал нормально.
Время, чтобы освежить мой linq!