2011-06-23 13 views

Respuesta

2

Sus entidades se desprenden una vez que se elimina el contexto. Véase el siguiente mensaje:

Entity Framework Multiple Object Contexts

+1

http://stackoverflow.com/questions/2244843/entity-framework-detaching-entities-when-objectcontext-disposed sugiere que es necesario desconectar? ¿No es correcto? – glosrob

5

No, no tiene que llamar a separar en sus entidades. Sin embargo, si haces algo como:

var people = Context.Person.Where(p => p.FirstName == "John"); 

y después de deshacerse de su contexto, la gente va a lanzar una excepción, ya que el IEnumerable ha aplazado la ejecución. Haciendo esto:

var people = Context.Person.Where(p => p.FirstName == "John").ToList(); 

le permitirá seguir utilizando su lista de personas.

Además,

var john = Context.Person.FirstOrDefault(p => p.Id == 342); 

va a funcionar después de contexto está dispuesta, porque has cogió una entidad específica y no una enumeración.

7

Quizás depende del significado de Detach. La entidad adjunta significa que el contexto conoce la entidad y rastrea sus cambios. Si descarta el contexto, ya no puede rastrear los cambios y la entidad es como desapegada. Lo similar tiene un significado real aquí.

Si está utilizando proxies dinámicos (POCO - seguimiento dinámico de cambios o carga diferida), el proxy en sí mantiene una referencia interna hacia atrás del contexto, pero no reacciona ante la eliminación del contexto. Todavía conserva la referencia (por cierto, esto puede ser fuente de algunas pérdidas de memoria desagradables). Esto causa un problema en dos situaciones:

  • Cuando intenta adjuntar a dicha entidad a otro contexto que arrojará alguna excepción a esa entidad se puede seguir solamente por el contexto individual (a pesar de que contexto original ya está muerto).
  • Cuando intente acceder a la propiedad de navegación que no estaba ansiosamente cargada obtendrá ObjectDisposedException porque el proxy activará la carga diferida en el contexto eliminado.

La única manera de evitar esto es deshabilitar los proxies dinámicos o separar manualmente la entidad antes de eliminar el contexto. Esto tiene otra desventaja: la separación de la entidad rompe las relaciones.

Cuestiones relacionadas