EF ObjectContext, Service and Repository - Gestión de la duración del contexto.

Soy bastante nuevo en el MVP y en el mundo de Entity Framework, así que tengan paciencia conmigo.

Actualmente tengo una combinación de View + Presenter, la vista tiene dos eventos Editar y Eliminar y el presentador solo escucha estos eventos. También tengo un objeto de servicio y repositorios configurados. La capa de servicio toma algunas implementaciones de repositorio que toman un ObjectContext por lo que el orden de construcción es (pasando el objeto superior al que está debajo:

ObjectContext
   |
   V
Repositries
   |
   V
Service Object
   |
   V
Presenter

Ahora el problema es que cuando creo un contexto de objeto en la parte superior, está activo durante todo el tiempo que el presentador está vivo, lo que significa que Editar y Eliminar utilizan la misma instancia de contexto del servicio.

Por lo tanto, llamar a ServiceObject.Delete y ServiceObject.Edit utiliza el mismo contexto, lo que dificulta la gestión del seguimiento de cambios. Por lo que entiendo, el contexto debería ser realmente de corta duración y solo para una unidad de trabajo, para mí Editar y Eliminar son diferentes lotes de trabajo.

¿Cómo haces DI con el marco de la entidad y aún administras el tiempo de vida del contexto?

He visto personas que acaban de agregar el contexto del objeto al lado del repositorio, es este un buen patrón.

O debería hacer eso en el objeto de servicio, algo como:

ServiceObject{
  public void Edit(// some args) {
     Using(var context = new MyObjectContext) {
         var repo = new MyRepo(context);
         var entity = repo.GetForID(12);
         // Do some stuff for edit
         context.SaveChanges();
     }
  }
}

Pero si lo hago así, ya no estoy pasando mi repositorio al constructor de ServiceObject y no estoy haciendo DI :(.

¿Que puedo hacer en esta situacion?

¿Alguien sabe algún proyecto de código abierto que pueda ver que me pueda ayudar con este problema?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta