EntityFramework: Error System.Data.Entity.Core .UpdateException en Delete

En algunos caso (mentira, es lo normal) se tiene una relación entre tablas donde una es dependiente de la otra, es decir, B existirá sólo si A exista. Como en la vida, terminar o borrar algo no es un simple click como en la Papelera de Reciclaje, eliminar algo requerirá eliminar otras cosas. Para esto caso, A no se podrá eliminar sin primero eliminar B. Al configurar una relación, EntityFramework bien sabe el flujo normal que deben tener estos procesos pero espera si no el último momento para lanzar el aviso:

System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details. —> System.Data.Entity.Core.UpdateException: A relationship from the ‘ProductInventory’ AssociationSet is in the ‘Deleted’ state. Given multiplicity constraints, a corresponding ‘Inventory’ must also in the ‘Deleted’ state. at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.RelationshipConstraintValidator.ValidateConstraints() at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.ProduceCommands() at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.<Update>b__2(UpdateTranslator ut) at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update[T](T noChangesResult, Func`2 updateFunction, Boolean throwOnClosedConnection) at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update(Boolean throwOnClosedConnection) at System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__33() at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy) at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass28.<SaveChanges>b__25() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options) at System.Data.Entity.Internal.InternalContext.SaveChanges() — End of inner exception stack trace — at System.Data.Entity.Internal.InternalContext.SaveChanges() at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() at System.Data.Entity.DbContext.SaveChanges() at ….

— El error dice que una asociación está en estado de “Eliminación” y que dada la unión, la otra esquina de la unión, también debe ser eliminada. Para esto, vamos al modelo y seleccionamos la unión/relación: Unión de EntityFramework Al seleccionar, vamos a las propiedades: Propiedad de Unión EF Se debe ir al punto o esquina que hace referencia al registro que queda “huérfano”. En este caso ‘Inventory’ también debe ser eliminado y se debe indicar en sus propiedades. Propiedad de Unión EF Como el nombre lo dice, en la eliminación de la esquina A, B debe ser eliminado consecuentemente.

Ahí tienes tu solución, ya le puedes seguir dando duro.

Happy Coding ✌

Anuncios

¿Quieres agregar algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s