dynamics crm 2011 - "EntityState se debe establecer en nulo, creado(para crear mensaje) o cambiado(para actualizar mensaje)" al intentar actualizar una entidad en CRM 2011
dynamics-crm-2011 (5)
Esto funcionó para mí:
recordToUpdate.EntityState = EntityState.Changed;
(recordToUpdate es una entidad que se actualizará)
Estoy usando el siguiente código para actualizar una entidad.
Service.Update(_policy);
donde la política es una clase generada usando CrmSvcUtil.exe
public partial class new_policy : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged
Recupero las políticas usando LINQ, luego actualizo un atributo (una EntityReference) y luego intento la actualización
Cuando este código se ejecuta, aparece el siguiente mensaje de error:
EntityState se debe establecer en nulo, Creado (para Crear mensaje) o Modificado (para Actualizar mensaje)
Hay otras entidades generadas de la misma manera que puedo actualizar.
Lo intenté
_policy.EntityState = EntityState.Changed
pero luego me sale un mensaje diciendo
La entidad es de solo lectura y la propiedad ''EntityState'' no se puede modificar. Utilice el contexto para actualizar la entidad en su lugar.
¿Alguien sabe qué está causando esto?
Para evitar el problema, simplemente puede usar update-helper-objects en lugar de usar el registro recuperado:
var policyUpdater = new Policy { Id = _policy.Id, FieldToUpdate = "newValue" };
service.Update(policyUpdater);
Nota: las propiedades del objeto update-helper que no están establecidas simplemente se ignoran. La actualización no establecerá los campos de registro correspondientes en nulo
Resulta que fue un problema con mi consulta linq que estaba recuperando la entidad en primer lugar. Cuando reemplacé esto con una expresión de consulta funcionó bien.
¡Es hora de repasar mi linq!
Tiene que decirle a su crmContext
(usar el nombre apropiado) qué hacer con los cambios.
Debe agregar crmContext.UpdateObject (contacto); antes de crmContext.SaveChanges ();
Consulte también ¿Cómo actualizar una entidad de CRM 2011 utilizando LINQ en un complemento?
Yo tuve el mismo problema. Cambié de usar
context.Update(object)
a
context.UpdateObject(object)
Y funcionó.