Pregunta

Tengo un dilema sobre cómo organizar la conexión (clase de repositorio) a la capa de datos en mi aplicación que usa Entity Framework.

¿Cómo lo escribirías? ¿Y por qué?

public class ResearchRepository
{
    public Research GetResearch (int id)
    {
        using (MnijenjeEntities mnijenjeContext = new MnijenjeEntities())
        {
            ObjectQuery<Research> researchs = mnijenjeContext.Research;

            var research = (from r in researchs.Include("SurveyPaper")
                            where r.ResearchID == id
                            select r).First();
            return research;
        }
    } //....

O

public class ResearchRepository
{
    private MnijenjeEntities mnijenjeContext;

    public Research GetResearch(int id)
    {
         mnijenjeContext = new MnijenjeEntities();

         ObjectQuery<Research> researchs = mnijenjeContext.Research;

         var research = (from r in researchs.Include("SurveyPaper")
                         where r.ResearchID == id
                         select r).First();
         return research;
    } //....

La diferencia está en el uso del objeto dataContext .

¿Fue útil?

Solución

Utilizo más o menos la última técnica, pero no estoy seguro de que esté haciendo la pregunta correcta, precisamente. La pregunta real, creo, es "¿cuál es la unidad de trabajo?" Necesitamos considerar algunos hechos básicos:

  • Usar múltiples ObjectContexts para la misma operación es considerablemente más difícil que usar un solo ObjectContext en una sola operación.
  • Mantener un ObjectContext durante mucho tiempo puede consumir mucha memoria y puede tener otros efectos secundarios no deseados.
  • El propio ObjectContext tiene una " transacción ligera " características, es decir, que acumula cambios y puede aplicarlos todos a la vez y que, en cierta medida, está aislado de los cambios en otros contextos.

Por lo tanto , tiendo a tratar de usar un ObjectContext por unidad de trabajo, y dispongo del contexto cuando la unidad de trabajo está completa. Dado que una unidad de trabajo puede implicar múltiples repositorios, yo instancia una clase de Servicio que crea el ObjectContext también puede devolver repositorios. Cuando le pido al servicio un repositorio, inyecta el ObjectContext antes de devolver la nueva instancia. La disposición del servicio elimina el contexto y todos los repositorios a la vez.

Utilizo una instancia de servicio por unidad de trabajo. En mi caso, estoy haciendo MVC de ASP.NET, por lo que una unidad de trabajo es una respuesta a una sola solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top