in den Beispielen rund um Linq2Sql findet man stets die Vorgehensweise mit
using (MyDataContext db = new MyDataContext(_connectionString)) { return db.Tabelle; }
Das using sichert, dass die DB-Verbindung nach dem Request ordentlich geschlossen wird (Dispose) - das ist doch so, oder?
Ist die Verwendung von Linq2Sql in dieser Art - z.B. in einem ASP.Net-Umfeld - überhaupt sinnvoll? Bei einer stark frequentierten Anwendung wird bei jedem Request ein MyDataContext-Objekt erstellt, kann ich dies nicht einmal beim ersten Request tun und dann dieses Objekt für alle weiteren Anfragen nutzen? Ist das nicht Ressourcen-schonender?
Im Nerddinner-Asp.Net MVC Referenzbeispiel wird die Datenbereitstellungs-Klasse über ein Interface (IDinnerRepository) abgeleitet, aber auch hier habe ich doch für jede Abfrage ein neues DB-Context-Objekt?
A DataContext is lightweight and is not expensive to create. A typical LINQ to SQL application creates DataContext instances at method scope or as a member of short-lived classes that represent a logical set of related database operations.
Ich habe mir das using... mit einem Profiler angesehen bei einer Anwendung in der viel auf der Datenbank gemacht wird. Das kostet schon Zeit. Allerdings ist es unbedingt ratsam, das using auszuführen und nicht ein Singleton oder einen globalen Kontext zu verwenden, da man bei zu hohem Traffic irgendwann dann überläuft.
Das Singleton kann man ja auch disposen.
Wichtig dabei ist ja nur das man den DataContext systemweit nur einmal aufruft.