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
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 ...
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.
- 1. ASP.NET Cookie in Seitenanforderung
- 2. MiniProfiler zum Ignorieren der Seitenanforderung
- 3. Maximale Länge einer OpenID
- 4. T5 Seitenanforderung leeres Layout unter Schwerlast Test
- 5. Unit Testing in asp.net MVC, wie spot ich eine Seitenanforderung?
- 6. Maximale Länge der Funktionsnamen in einer DLL
- 7. WPF-WrapPanel In einer ViewBox maximale Größe
- 8. Maximale Bildgröße in einer Browser/CSS-Spezifikation?
- 9. Maximale Codezeilen in einer Java-Klasse zulässig?
- 10. Maximale Größe einer PHP-Sitzung
- 11. maximale Länge einer Spalte in einer Liste von Listen
- 12. Maximale Transaktionsgröße in PostgreSQL
- 13. PHP und XML: Die Kosten für die Analyse einer großen XML-Datei bei jeder Seitenanforderung
- 14. Warum kann eine HTTPS-Seitenanforderung schneller als HTTP sein?
- 15. Return maximale ID-Nummer aus einer Datenbank
- 16. Warum reagiert IIS auf eine sichere (SSL-) Seitenanforderung mit einer 302 auf seine nicht sichere Version?
- 17. Was ist die maximale Länge einer Zeichenfolge?
- 18. Maximale Länge einer rfc 4122 Version 4
- 19. Maximale Produktuntersequenz
- 20. maximale Zeilenlänge in Python
- 21. maximale Anzahl in js
- 22. Maximale Anforderungen in IIS
- 23. Maximale Dateigröße in PyCharm
- 24. Maximale Ausführungszeit in phpMyadmin
- 25. Maximale Dateigröße bei einer bestimmten Inode-Struktur?
- 26. maximale Größe in BlobProperty (appengine)
- 27. Maximale Anzahl von lokalen Variablen in einer Java-Methode
- 28. Was ist die maximale Größe einer ItemView in EWS?
- 29. jquery datatables - Maximale Anzahl von Spalten in einer Datentabelle
- 30. Maximale Anzahl von Threads in einer .NET App?
Wenn ich einen Datenkontext in der Business-Schicht erstelle, wie kann ich DataContext ordnungsgemäß an jedes Repository weitergeben, auf das ich zugreife? – zsharp
über Abhängigkeitsinjektion –