/ / Un error de una sola vez interrumpe el uso posterior de Entity framework - ef-code-first, autofac, life-cycle, entity-framework-5

Un error de una vez interrumpe el uso posterior de Entity framework: ef-code-first, autofac, life-cycle, entity-framework-5

Tenemos un problema con el marco de la entidad. Por ejemplo si hacemos:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

y luego intentamos eliminar una entidad que ha asignado entidades secundarias que dependen de ella, es lógico que obtengamos un error. (No se puede eliminar el padre cuando hay hijos en la base de datos que dependen de él).

Luego, usando una nueva instancia de contexto, haciendo un "ParentEntity.ChildEntities.ToList ()" ¡todavía hay un problema!

Una solución es reiniciar el grupo de aplicaciones, y el problema desaparece.

Estamos utilizando Autofac y el ciclo de vida del contexto se establece (y se confirma) a por HttpRequest, por lo que el error persiste en otra parte. ¿Alguna idea de qué se puede hacer para evitar estos errores?

Nuestra conjetura es que el objectcontext es persistente.en otro lugar, y almacena el estado de las entidades secundarias como "EntityState.Deleted", por lo que esto entra en conflicto con los datos reales recibidos de la base de datos en las llamadas posteriores.

Actualizar: Parece que un examen más detenido de la pila revela que hay un contexto interno perezoso:

[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.Internal.InternalContext.SaveChanges() +200
System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +33
System.Data.Entity.DbContext.SaveChanges() +20

Tal vez si tuviera que desactivar de alguna manera LazyInternalContext? Se puede hacer esto?

Respuestas

0 para la respuesta № 1

Si no desea obtener las excepciones y mantener la base de datos en un estado válido por sí mismo por alguna razón, puede hacerlo deteniendo la validación:

context.Configuration.ValidateOnSaveEnabled = false; // you can put this in the constructor of your context;
context.SaveChanges();