.NET Entity Framework et les transactions

Être de nouveau à l'Entity Framework, je suis vraiment plutôt coincé sur la façon de procéder avec cet ensemble de questions. Sur le projet que je suis en train de travailler, l'ensemble du site est fortement intégré avec le modèle EF. Au premier abord, l'accès à l'EF contexte a été contrôlée à l'aide d'une Injection de Dépendance de programme d'amorçage. Pour des raisons opérationnelles, nous n'avons pas été en mesure d'utiliser un DI bibliothèque. J'ai enlevé ce et utilisé un modèle de différentes instances de l'objet de contexte où nécessaire. J'ai commencé à faire de l'exception suivante:

Type " XXX " a été cartographié plus d'une fois.

Nous sommes arrivés à la conclusion que les différentes instances du contexte ont été à l'origine de ce problème. J'ai ensuite extraites du contexte de l'objet en une seule instance statique qui a été consulté par chaque thread/page. Je suis maintenant l'un de plusieurs exceptions sur les transactions:

Nouvelle transaction n'est pas autorisée, car il y a d'autres threads d'exécution
dans la session.

L'opération de transaction ne peut pas être effectuée parce qu'il y a
les demandes en attente de travailler sur cette transaction.

ExecuteReader nécessite la commande pour une transaction lorsque l'
connexion affectés à la commande est en attente de la transaction locale.
La Transaction de propriété de la commande n'a pas été initialisé.

Le dernier de ces exceptions s'est produite sur une opération de chargement. Je ne cherche pas à sauver le contexte de l'état vers la Db sur le thread qui a échoué. Il y avait un autre thread d'exécution d'une telle opération cependant.

Ces exceptions sont intermittentes au mieux, mais j'ai réussi à obtenir le site d'entrer dans un état où les nouvelles connexions ont été refusées en raison d'une opération de verrouillage. Malheureusement, je ne trouve pas les détails de l'exception.

Je suppose que ma première question est de savoir si le modèle EF être utilisé à partir d'une statique instance unique? Aussi, est-il possible de supprimer la nécessité pour les transactions en EF? J'ai essayé d'utiliser un TransactionScope objet sans succès...

Pour être honnête, je suis coincé ici, et ne peut pas comprendre pourquoi (ce qui devrait être) assez simples opérations sont à l'origine d'un tel problème...

  • Connexes: stackoverflow.com/questions/10585478/...
  • C'est dommage que vous ne pouvez pas utiliser un CIO programme d'amorçage, parce que la solution avec Ninject serait de lier un "bien commun" de l'instance à la demande de la portée, comme d'autres l'ont suggéré: kernel.Bind<IRepository<SomeModel>>().To<EfGenericRepository<SomeModel, YourDbContext>>().InRequestScope(); -- l'important étant InRequestScope
InformationsquelleAutor sicknote | 2010-07-16