Saltar al contenido

Cómo usar un dbcontext en un static ¿clase? (ObjectDisposedException)

Te damos el hallazgo a esta contrariedad, al menos eso esperamos. Si tienes preguntas deja tu comentario, que para nosotros será un placer responderte

Solución:

Sí, entonces, aunque las extensiones son nuevas y brillantes para ti, eso no significa que debas usarlas para todo. Primero, las extensiones deben tener una conexión lógica con el tipo en el que están operando. Por ejemplo, si tienes un stringalgo como ToUpper() tiene sentido como una extensión porque modifica y devuelve un string. Algo así como lo que está tratando de hacer: simplemente usar el valor de la referencia para devolver un tipo completamente extraño es una violación del patrón de extensión.

En segundo lugar, una extensión no debería interactuar con algo como una base de datos. En particular aquí, el static La naturaleza de una extensión es completamente incompatible con el concepto de un objeto de contexto EF. La única forma en que podría incluso hacer que funcione es actualizar un contexto cada vez que se llama a la extensión, dentro de la extensión. Esa es una excelente manera de arruinar el seguimiento de objetos EF y una excelente manera de perder memoria.

Largo y corto, no hagas esto.

Si solo está tratando de eliminar este código, tiene mejores opciones. Por ejemplo, puede simplemente agregar métodos directamente a su contexto.

public class ApplicationDbContext : DbContext

    ...

    public bool HasDota2Account(string id)
    
        return Dota2Accounts.Any(m => m.ApplicationUserId == id);
    

Luego, en su controlador, simplemente puede hacer:

var hasDota2Account = context.HasDota2Account(User.Identity.GetUserId());

Si aceptas, tienes la opción de dejar una reseña acerca de qué le añadirías a esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *