none
como Aplicar using(dbContext db = new dbContext) y dispose Entity framework RRS feed

  • Pergunta

  • Estoy un poco confundido de como usar using y dispose con entity framework en la capa de datos.

    Podrian colocar un código de ejemplo para mi? En un video vi que usan IDisposable pero el entity framework cuando uno genera un controller crea un metodo dispose(). ahora bien, no se si ese metodo me sirve en la capa de datos

    quarta-feira, 19 de fevereiro de 2020 15:01

Todas as Respostas

  • […] cuando uno genera un controller crea un metodo dispose().

    Eso es debido a que el Controller declara la variable una vez a nivel de clase, y luego la usa en varios metodos. Por eso tiene el "Dispose", para liberarla cuando sales de la clase con independencia de los metodos que la hayan utilizado mientras tanto.

    En la capa de datos se podria hacer lo mismo (en cuyo caso no debes usar "using"), pero hay una recomendacion mejor: haz que cada metodo que requiera el dbcontext haga un "using" del mismo. Eso abre y cierra el contexto dentro del metodo, cosa que aunque parezca costosa en realidad es rapida gracias al Pool de conexiones. De esta manera te evitas preocuparte de hacer el dispose de la clase de la capa de datos, y te olvidas de los problemas con el tracking de entidades cuando llamas a varios metodos sobre el mismo dbcontext (pero por supuesto te crea el problema contrario en caso de que efectivamente requieras el tracking porque estas manipulando las mismas entidades desde varios metodos distintos).

    quarta-feira, 19 de fevereiro de 2020 17:16
  • hola

    >>Estoy un poco confundido de como usar using y dispose con entity framework en la capa de datos.

    podria ser

    public EntidadXX Obtener(int id){
    
       using(NombreDbContext context = new NombreDbContext()){
    
            return context.EntidadXX.FirstOrDefault(x=> x.Id == id);
    
       }
    
    }

    las operaciones las realizas dentro de un bloque using

    igual esto no aplica si la instancia del contexto la inyectas en el constructor con una libreria de IoC como ser Unity, autofac, Ninject, etc

    >>En un video vi que usan IDisposable pero el entity framework cuando uno genera un controller crea un metodo dispose().

    no se en que contexto has visto esto, podrias poner la fuente? porque asi como lo explicas no se entiende

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    quarta-feira, 19 de fevereiro de 2020 18:39
  • hola 

    cuando se usa IDisposeable es cuando haz implementado un patron repository y el patron unitwork con entity-framework pero como explica @LeandroTuttini para el using es lo correcto y cuando no utilizas una arquitectura compleja.

    en este articulo me sirvio para entender los 2 patrones que te expuse y la inyección de dependencias 

    quarta-feira, 19 de fevereiro de 2020 19:06