88 votes

Quand dois-je créer un nouveau DbContext() ?

J'utilise actuellement un DbContext similaire à celui-ci :

namespace Models
{
    public class ContextDB: DbContext
    {

        public DbSet<User> Users { get; set; }
        public DbSet<UserRole> UserRoles { get; set; }

        public ContextDB()
        {

        }
    }
}

J'utilise ensuite la ligne suivante en haut de l'écran de l'application TOUTES mes contrôleurs qui ont besoin d'accéder à la base de données. Je l'utilise également dans ma classe UserRepository qui contient toutes les méthodes relatives à l'utilisateur (comme obtenir l'utilisateur actif, vérifier quels rôles il a, etc ) :

ContextDB _db = new ContextDB();

En y réfléchissant, il y a des occasions où un visiteur peut avoir plusieurs DbContexts actifs, par exemple s'il visite un contrôleur qui utilise le UserRepository, ce qui n'est peut-être pas la meilleure des idées.

Quand dois-je créer un nouveau DbContext ? Ou bien, devrais-je avoir un contexte global qui est transmis et réutilisé à tous les endroits ? Cela n'entraînerait-il pas une baisse des performances ? Les suggestions d'autres façons de procéder sont également les bienvenues.

-1voto

CSharper Points 3810

Il s'agit évidemment d'une vieille question, mais si vous utilisez DI, vous pouvez faire quelque chose comme ceci et étendre tous vos objets pendant la durée de vie de la requête.

 public class UnitOfWorkAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var context = IoC.CurrentNestedContainer.GetInstance<DatabaseContext>();
            context.BeginTransaction();
        }

        public override void OnActionExecuted(HttpActionExecutedContext actionContext)
        {
            var context = IoC.CurrentNestedContainer.GetInstance<DatabaseContext>();
            context.CloseTransaction(actionContext.Exception);
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X