Question

J'ai plusieurs méthodes qui traitent de la base de données et toutes commencent par un appel

FaierDbDataContext db = new FaierDbDataContext();

Etant donné que l'objet DataContext Linq2Sql implémente IDisposable, doit-il être utilisé avec "en utilisant"? "

using (FaierDbDataContext db = new FaierDbDataContext()) {
    // use db here
}

Quelles sont les implications de l’utiliser d’une manière ou d’une autre?

Était-ce utile?

La solution

  

Contrairement à la plupart des types qui implémentent   IDisposable, DataContext pas   vraiment besoin de disposer - du moins pas   dans la plupart des cas. J'ai demandé à Matt Warren   à propos de cette décision de conception, et ici   était sa réponse:

     

Il y a quelques raisons pour lesquelles nous avons implémenté   IDisposable:

     
      
  • Si la logique de l'application doit conserver une entité au-delà de   DataContext devrait être utilisé ou   valide, vous pouvez appliquer ce contrat en   appeler Dispose. Chargeurs différés en   cette entité fera toujours référence   le DataContext et va essayer de l'utiliser   si un code tente de naviguer dans la   propriétés différées. Ces tentatives   va échouer. Dispose force également le   DataContext pour vider son cache de   entités matérialisées de telle sorte qu'un seul   entité mise en cache ne sera pas accidentellement   garder en vie toutes les entités matérialisées   à travers ce DataContext, qui serait   sinon causer ce qui semble être un   fuite de mémoire.
  •   
  • La logique qui ferme automatiquement la connexion DataContext peut être   trompé en laissant la connexion   ouvrir. Le DataContext s'appuie sur le   code d'application énumérant tous   les résultats d'une requête depuis l'obtention de   la fin d'un jeu de résultats déclenche la   connexion à fermer. Si la   application utilise IEnumerable   Méthode MoveNext au lieu d'un foreach   déclaration en C # ou VB, vous pouvez quitter   l'énumération prématurée. Si ton   l'application rencontre des problèmes avec   les connexions ne se ferment pas et vous   soupçonner le comportement de fermeture automatique   ne fonctionne pas, vous pouvez utiliser le Dispose   motif comme un moyen de contourner.
  •   

à partir de la source

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top