2012-02-08 3 views
1

Je pense que je suis confronté à un problème d'architecture que je peux résoudre:Où stocker DbContext dans une application asp.net?

Je développe d'abord un code d'infrastructure d'application web en utilisant (v4.3 beta1). En outre, quelques services Web sont publiés.

Dans une bibliothèque de classes distincte, j'ai le DbContext et al, les entités. Cette bibliothèque est référencée par l'application web, de manière évidente.

Dans la bibliothèque "données", j'ai une propriété statique pour tenir de contexte:

namespace MMOrpheus.Lib 
{ 
    public class Context 
    { 
     public static MMOrpheusDB MMO 
     { 
      get 
      { 
       if (HttpContext.Current != null && HttpContext.Current.Session["MMOEntities"] == null) 
       { 
        HttpContext.Current.Session["MMOEntities"] = new MMOrpheusDB(); 
       } 
       return HttpContext.Current.Session["MMOEntities"] as MMOrpheusDB; 
      } 
      set 
      { 
       if (HttpContext.Current != null) 
        HttpContext.Current.Session["MMOEntities"] = value; 
      } 
     } 
    } 
} 

MMOrpheusDB héritent de DbContext.

Donc, le problème est que je pense que ce n'est pas correct. Entre autres, je ne pense pas que cette classe Context devrait utiliser System.Web!

Des suggestions sur comment organiser ce projet?

Répondre

2

La réponse à votre question n'est pas une question simple.

d'abord tout ce que je suggère, vous utilisez une inversion injection de dépendance & du cadre de contrôle (StructureMap, unité, ...).

Si vous allez stocker votre DbContext, en utilisant un du CIO rendra si facile. Vous pouvez définir durée de vie de votre contexte. Je vais normalement avec PerRequest durée de vie. Une instance de DbContext pour chaque requête Web. DBContext commence par une requête et se termine par celle-ci.

Mais il n'y a pas besoin d'aller avec ce modèle. Vous pouvez simplement commencer vous contexte lorsque vous en avez besoin et disposer après son utilisation.

Si vous préférez la première approche, la recherche de Driven Design domaine, CIO, unité de travail, Pattern Repository & etc.

+0

Merci Afshin Gh, vous avez donné beaucoup à lire –

Questions connexes