In einer Web-Anwendung, die ich laufe über habe, fand ich den folgenden Code mit dem Datacontext zu behandeln, wenn sie mit LinqToSQLLinqToSql statische Datacontext in einer Web-Anwendung
public partial class DbDataContext
{
public static DbDataContext DB
{
get
{
if (HttpContext.Current.Items["DB"] == null)
HttpContext.Current.Items["DB"] = new DbDataContext();
return (DbDataContext)HttpContext.Current.Items["DB"];
}
}
}
Umgang
Dann verweist er dies später zu tun:
DbDataContext.DB.Accounts.Single(a => a.accountId == accountId).guid = newGuid;
DbDataContext.DB.SubmitChanges();
Ich habe im Umgang mit LinqToSQL nach Best Practices gesucht.
Ich bin nicht sicher über den Ansatz, den dieser verwendet, wenn DataContext nicht ThreadSafe ist und eine statische Kopie davon aufbewahrt.
Ist dies ein guter Ansatz für eine Webanwendung?
@ Longhorn213 - Basierend auf dem, was Sie gesagt haben, und je mehr ich in HttpContext gelesen habe, denke ich, dass Sie Recht haben. Aber in der Anwendung, die ich geerbt habe, verwirrte es das, weil sie zu Beginn jeder Methode die Datenbank erneut anfordern, um die Information zu erhalten, dann diese Instanz des Datenkontextes zu modifizieren und Änderungen daran zu übermitteln.
Davon, denke ich, sollte diese Methode entmutigt werden, weil es den falschen Eindruck erweckt, dass der Datenkontext statisch ist und zwischen den Anforderungen persistiert. Wenn ein zukünftiger Entwickler denkt, dass er die Daten zu Beginn einer Methode erneut abfragt, weil sie denken, dass sie bereits da ist, könnten sie Probleme bekommen und nicht verstehen, warum.
Also ich denke, meine Frage ist, sollte diese Methode in der zukünftigen Entwicklung entmutigt werden?
Hier ist ein toller Beitrag mit mehr Details: http://blog.stevensanderson.com/2007/11/29/linq-to-sql-the-multi-tier-story/ –
Wir haben gerade eine Variante dieses Konzepts gerollt heute Abend. –