J'utilise le code bootstrapping StructureMap suivant pour mon Entity Framework 4 entités:cadre de l'entité StructureMap 4 connexion
x.For<XEntities>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.PerRequest)).Use(() => new XEntities());
Mais quand je fais deux demandes presque simultanées, je reçois l'exception suivante:
EntityException:The underlying provider failed on Open.
{"The connection was not closed. The connection's current state is connecting."}
J'utilise ASP.NET MVC 2, et j'ai ce qui suit dans mon Application_Start() EndRequest + = new EventHandler (MvcApplication_EndRequest);
void MvcApplication_EndRequest(object sender, EventArgs e)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
Que puis-je faire pour résoudre ce problème?
[edit] cela se passe sur une page avec plusieurs images dessus. Les images proviennent de la base de données, servies par une action du contrôleur, qui lit l'image de la base de données et l'envoie en tant que résultat de fichier au navigateur. Je pense qu'asp.net décompose mon objectcontext, et ferme ma connexion db quand les demandes d'images arrivent, et l'exception est levée. Ce dont j'ai besoin maintenant, c'est une façon correcte de gérer la vie du contexte de l'objet dans le bon sens. Pourquoi attribuez-vous un délégué pour EndRequest dans Application_Start()?
Vous ne voulez certainement pas appeler quoi que ce soit sur ObjectFactory dans l'événement EndRequest. ObjectFactory est statique, ce qui signifie qu'il s'agit du même objet utilisé pour toutes vos demandes. Vous pourriez appeler ReleaseAndDispose sur une requête en cours de traitement. –
Qu'est-ce que XEntities? Est-ce l'objet qui gère votre connexion à la base de données? –
Vous ne voulez probablement pas le cycle de vie InstanceScope.PerRequest, puisqu'il s'agit de la valeur par défaut (où request = un appel au conteneur). Je suppose que vous voulez dire "donnez-moi le même objet tout au long d'une requête HTTP". Si tel est le cas, regardez les cycles de vie HTTP, comme le suggère RPM1984 ci-dessous. –