«EntityState должен быть установлен в null, Created (для сообщения Create) или Changed (для сообщения Update)» при попытке обновить сущность в CRM 2011 - PullRequest
16 голосов
/ 31 мая 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 (для сообщения Create) или Changed (для сообщения Update)

Существуют и другие сущности, сгенерированные таким же образом, которые я могу обновлять.

Я пытался

_policy.EntityState = EntityState.Changed

, но затем я получаю сообщение о

Объект доступен только для чтения, и свойство EntityState не может быть изменено.Вместо этого используйте контекст, чтобы обновить сущность.

Кто-нибудь знает, что является причиной этого?

Ответы [ 5 ]

20 голосов
/ 31 мая 2011

Вы должны сообщить своему crmContext (используйте соответствующее имя), что делать с изменениями.

Вы должны добавить crmContext.UpdateObject (contact); перед crmContext.SaveChanges ();

См. Также Как обновить сущность CRM 2011 с помощью LINQ в плагине?

9 голосов
/ 28 декабря 2011

У меня была такая же проблема. Я перешел с использования

context.Update(object) 

до

context.UpdateObject(object) 

и это сработало.

8 голосов
/ 07 августа 2014

Чтобы избежать проблемы, вы можете просто использовать update-helper-objects вместо использования извлеченной записи:

var policyUpdater = new Policy { Id = _policy.Id, FieldToUpdate = "newValue" };
service.Update(policyUpdater);

Примечание. Свойства объекта-помощника обновления, которые не установлены, просто игнорируются. Обновление не установит для соответствующих полей записи значение null

2 голосов
/ 24 сентября 2013

Это сработало для меня:

recordToUpdate.EntityState = EntityState.Changed;

(recordToUpdate - это сущность, подлежащая обновлению)

1 голос
/ 01 июня 2011

Оказывается, это была проблема с моим запросом linq, который сначала извлекал сущность. Когда я заменил это на выражение запроса, все заработало.

Время освежить мой linq!

...