Frage

Wir haben gerade damit begonnen, LINQ to SQL für unsere DAL zu verwenden, und wir haben noch keinen wirklichen Standard für das Out-Caching-Modell entwickelt.Früher haben wir eine Basisklasse „DAL“ verwendet, die eine Cache-Manager-Eigenschaft implementiert hat, von der alle unsere DAL-Klassen geerbt haben, aber jetzt haben wir das nicht mehr.Ich frage mich, ob jemand einen „Standard“-Ansatz zum Zwischenspeichern von LINQ to SQL-Ergebnissen entwickelt hat?

Wir arbeiten in einer Webumgebung (IIS), falls das einen Unterschied macht.Ich weiß, dass dies am Ende durchaus eine sein könnte subjektiv Frage, aber ich denke immer noch, dass die Informationen wertvoll wären.

BEARBEITEN: Um es klarzustellen: Ich spreche hier nicht von der Zwischenspeicherung eines einzelnen Ergebnisses, sondern eher von einer Architekturlösung, etwa der Frage, wie man die Zwischenspeicherung so einrichtet, dass alle Linkmethoden dieselbe Zwischenspeicherungsarchitektur verwenden.

War es hilfreich?

Lösung

Eine kurze Antwort:Verwenden Sie das Repository-Muster (siehe Domain Driven Design von Evans), um Ihre Entitäten abzurufen.Jedes Repository speichert die darin enthaltenen Dinge zwischen, idealerweise indem jede Instanz des Repositorys auf einen Singleton-Cache zugreifen kann (jeder Thread/jede Anfrage instanziiert ein neues Repository, es kann jedoch nur einen Cache geben).

Die obige Antwort funktioniert nur auf einer Maschine.Um dies auf vielen Maschinen nutzen zu können, verwenden Sie zwischengespeichert als Ihre Caching-Lösung.Viel Glück!

Andere Tipps

Mein LINQ-Abfrageergebnis-Cache ist wahrscheinlich genau das, was Sie suchen.

var q = from c in context.Customers
        where c.City == "London"
        select new { c.Name, c.Phone };

var result = q.Take(10).FromCache();

Pete.

Es liegt direkt vor Ihrer Nase:

List<TableItem> myResult = (from t in db.Table select t).ToList();

Jetzt speichern Sie myResult einfach zwischen, so wie Sie die zurückgegebenen Daten Ihrer alten DAL zwischengespeichert hätten.

ich fand dieser Beitrag, die eine Erweiterungsmethode zum Zwischenspeichern der LINQ-Objekte bietet.

Ich habe mir den Kopf über Schwachstellen gekümmert, die jetzt auf der Suche nach einer guten Caching-Lösung für Linq2SQL sind. Ich muss zugeben, dass es mir wirklich schwerfällt, eine Einheitslösung zu finden, die für alle passt ...

Das Repository-Muster schränkt tendenziell den Nutzen von Linq ein, da (ohne Neuimplementierung von IQueryable) das Caching außerhalb der Linq-Anweisung durchgeführt werden muss.

Darüber hinaus sind verzögertes Laden und Objektverfolgung beides große No-Gos, wenn Sie Ihre Objekte zwischenspeichern möchten, was die Durchführung von Aktualisierungen etwas schwieriger macht.

Jeder, der es geschafft hat, dieses Problem in einem Webprojekt mit hoher Parallelität zu lösen, meldet sich bitte und rettet die Welt!:) :)

Ich verstehe, dass dies vielleicht eine etwas späte Antwort ist ...Nichtsdestotrotz können Sie es versuchen LinqToCache Projekt.Wenn möglich, bindet es eine SqlDepdency an eine beliebige LINQ-Abfrage und stellt über die serverseitigen Abfragebenachrichtigungen eine aktive Cache-Invalidierung bereit.Bei den Abfragen muss es sich um gültige Abfragen für Benachrichtigungen handeln, siehe Erstellen einer Abfrage zur Benachrichtigung.Die meisten Linq-zu-SQL-Abfragen entsprechen diesen Einschränkungen, solange die Tabellen mit zweiteiligen Namen angegeben werden (dbo.Table, nicht nur Table).

Siehe die Methode „GetReferenceData“ in der Klasse „ReferenceData“ in Dieser Artikel: http://blog.huagati.com/res/index.php/2008/06/23/application-architecture-part-2-data-access-layer-dynamic-linq/

Es verwendet den Seitencache von asp.net zum Zwischenspeichern von mit L2S abgerufenen Daten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top