Soy bastante nuevo en MVP y en el mundo de Entity Framework, así que tengan paciencia conmigo.EF ObjectContext, Service and Repository - Gestión de la duración del contexto.
Actualmente tengo una combinación de Vista + Presentador, 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 del repositorio que tienen un ObjectContext por lo que el orden de la construcción está (pasando el objeto arriba a la de abajo:
ObjectContext
|
V
Repositries
|
V
Service Object
|
V
Presenter
Ahora el problema es que cuando creo 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 utiliza la misma instancia de contexto del servicio.
Por lo tanto, llamar a ServiceObject.Delete y ServiceObject.Edit utiliza el mismo contexto, lo que dificulta administrar el seguimiento de cambios. Por lo que entiendo, el contexto en realidad solo debe ser de corta duración y solo para una unidad de trabajo, para mí, Editar y Eliminar son ambos lotes de trabajo diferentes.
¿Cómo se hace DI con el marco de entidad y todavía se administra el tiempo de vida del contexto?
He visto gente que acaba de actualizar el contexto del objeto en el lado del repositorio, este es un buen patrón.
o debería hacerlo en el objeto de servicio, algo así 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 como que ya no estoy pasando mi repositorio en el constructor de ServiceObject y no hacer DI :(.
¿Qué puedo hacer en esta situación?
¿alguien sabe cualquier proyecto de código abierto que puedo mirar que me puede ayudar con este problema.
Gracias.
Uuh eso es bueno! – Roubachof