2009-05-15 6 views
1

Es ist nicht eins ist es? Ich habe eine Methode, die fünf Listen aus verschiedenen Repositories bekommt. Jeder Aufruf öffnet und schließt einen neuen Datenkontext. Ist das in Ordnung oder sollte ich alles in einen Datenkontext einbinden? In diesem Fall ist es nicht einfach, den gleichen Datenkontext zu verwenden, aber ich befürchte, dass das Öffnen und Schließen zahlreicher Datenkontexte in einer Seitenanforderung nicht gut ist. HierMaximale 'Arbeitseinheiten' in einer Seitenanforderung?

Antwort

2

ist ein Artikel auf gerade dieses Thema ...

Linq to SQL DataContext Lifetime Management

Er empfiehlt, einen pro Anfrage und ich habe dieses Muster in einigen Anwendungen implementiert und es hat funktioniert gut für mich.

sprechen Er ein wenig über das in Artikel ist ... Seine schnelle und schmutzige Version macht einen Verweis auf System.Web und tut etwas wie folgt aus:

private TDataContext _DataContext; 

    public TDataContext DataContext 
    { 
     get 
     { 
      if (_DataContext == null) 
      { 

       if (HttpContext.Current != null) 
       { 
        if (HttpContext.Current.Items[DataContextKey] == null) 
        { 
         HttpContext.Current.Items[DataContextKey] = new TDataContext(); 
        } 

        _DataContext = (TDataContext)HttpContext.Current.Items[DataContextKey]; 
       } 
       else 
       { 
        _DataContext = new TDataContext(); 
       } 
      } 

      return _DataContext; 
     } 
    } 

Aber dann empfiehlt er Ihnen den nächsten Schritt und loszuwerden des Verweises auf System.Web und Dependency Injection verwenden und deine eigenen IContainer erstellen, die die Lebensdauer Ihres Datacontext basierend darauf, ob Ihr Lauf in Unit-Test, Web-Anwendung bestimmen könnten, usw.

Beispiel:

public class YourRepository 
{ 

    public YourRepository(IContainer<DataContext> container) 
    { 

    } 

} 

dann HttpContext.Current.Items[DataContextKey] mit _Container[DataContextKey]

Hoffnung ersetzt diese ...

+0

Wenn ich einen Datenkontext in der Business-Schicht erstelle, wie kann ich DataContext ordnungsgemäß an jedes Repository weitergeben, auf das ich zugreife? – zsharp

+0

über Abhängigkeitsinjektion –

0

hilft ich auf der Arbeitseinheit pro Anfrage und baute eine IHttpModule der Arbeitseinheit Lebenszyklus verwaltet, es auf Anfrage erstellen und danach diposing. Die aktuelle Arbeitseinheit wird in HttpContext.Current.Items (in Local.Data verborgen) gespeichert.

Verwandte Themen