2013-03-28 3 views
1

J'ai une application ASP.NET MVC qui utilise EF pour gérer la base de données. J'ai utilisé DDD comme architecture et j'ai obtenu les modèles Repository et Service.StructureMap, ASP.NET et Entity Framework DbContext disposent

J'essaie d'utiliser StructureMap pour DI mais pour une raison quelconque, ma base de données a été éliminée après la première requête.

Edit: L'erreur que je suis erreur que je reçois est

L'opération ne peut être effectuée car le DbContext a été disposé .

Il semble que je reçois dans le dépôt, par exemple dans:

public class AccountRepository : Repository<Account>, IAccountRepository 
{ 
    public AccountRepository(MyDbContext context) : base(context) { } 

    public Account FindAccountByEmailAddress(string emailAddress, bool loadRelatedRoles = false) 
    { 
     IQueryable<Account> query = (from a in Entity 
            where a.LoweredEmailAddress == emailAddress.ToLower() 
            select a); 
     if (loadRelatedRoles) 
     { 
      return query.Include(a => a.Roles).FirstOrDefault(); 
     } 

     return query.FirstOrDefault(); 
    } 
} 

Dans le Application_BeginRequest Je l'enregistrement de la DB en utilisant

 ObjectFactory.Configure(x => 
     { 
      x.For(typeof(MyDbContext)) 
       .HttpContextScoped(); 
     }); 

Afin de réserver comme une instance par demande.

Dans le Application_EndRequest je publie la demande à l'aide:

protected void Application_EndRequest(object sender, EventArgs e) 
    { 
     StructureMap.ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects(); 
    } 

Est-ce que je manque quelque chose? ou mon approche est OK et il y a peut-être un problème avec l'implémentation de mon Repository.

+1

Est-ce que cela se produit à chaque fois ou seulement lorsque le 'loadRelatedRoles' est vrai? Ce que j'essaie d'obtenir ici est de vérifier si les "Rôles" sont ajoutés paresseusement et que vous essayez de les récupérer plus tard (après que le Contexte ait été éliminé). Pouvez-vous également afficher le code du contrôleur dans lequel le référentiel est (injecté et) utilisé? – Tallmaris

+0

Je peux me tromper, mais toutes les demandes ne lancent-elles pas une demande de début et de fin? c.-à-d. chaque fichier CSS ou image, est-ce que vous êtes en train de disposer des objets inutilement? – Slicksim

+0

A propos de votre première question - J'utilise paresseux, mais j'ai enlevé cela pour le test et l'erreur continue à apparaître. Après avoir diagnostiqué plus loin en suivant votre commentaire - j'ai noté que j'ai eu ce problème puisque je me connecte à la DB dans Application_Start et Application_OnPostAuthenticateRequest qui semble employer différent HttpContext. – OzB

Répondre

1

Ok, j'ai trouvé le problème - il semble que mon code Application_Start a été invoqué plus d'une fois et j'ai utilisé Lazy dans certains cas - cela a causé l'enregistrement de la référence null au contexte DB.

Merci pour votre aide!

Questions connexes