Domanda

Abbiamo appena iniziato a utilizzare LINQ to SQL al lavoro per il nostro DAL e non abbiamo ancora trovato uno standard per il modello di memorizzazione nella cache.In precedenza utilizzavamo una classe "DAL" di base che implementava una proprietà del gestore della cache da cui ereditavano tutte le nostre classi DAL, ma ora non lo abbiamo.Mi chiedo se qualcuno abbia escogitato un approccio "standard" per memorizzare nella cache i risultati LINQ to SQL?

Stiamo lavorando in un ambiente web (IIS) se questo fa la differenza.So che questo potrebbe finire per essere un soggettivo domanda, ma penso ancora che le informazioni sarebbero preziose.

MODIFICARE: Per chiarire, non sto parlando di memorizzare nella cache un singolo risultato, sto cercando più una soluzione di architettura, ad esempio come impostare la memorizzazione nella cache in modo che tutti i metodi di collegamento utilizzino la stessa architettura di memorizzazione nella cache.

È stato utile?

Soluzione

Una risposta veloce:Utilizza il modello Repository (vedi Domain Driven Design di Evans) per recuperare le tue entità.Ogni repository memorizzerà nella cache le cose che conterrà, idealmente consentendo a ciascuna istanza del repository di accedere a una cache singleton (ogni thread/richiesta creerà un'istanza di un nuovo repository ma può esserci solo una cache).

La risposta sopra funziona solo su una macchina.Per poterlo utilizzare su molte macchine, utilizzare memcached come soluzione di memorizzazione nella cache.Buona fortuna!

Altri suggerimenti

Mio Cache dei risultati della query LINQ probabilmente è proprio quello che stai cercando.

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

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

Pietro.

È proprio sotto il tuo naso:

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

Ora, memorizza semplicemente nella cache myResult come avresti memorizzato nella cache i dati restituiti dal tuo vecchio DAL.

ho trovato questo post, che offre un metodo di estensione come mezzo per memorizzare nella cache gli oggetti LINQ.

Sto sbattendo la testa contro il muro per i deboli ora cercando di trovare una buona soluzione di memorizzazione nella cache per Linq2SQL, devo ammettere che faccio davvero fatica a trovare una soluzione adatta a tutti...

Il modello del repository tende a limitare l'utilità di Linq, poiché (senza reimplementare IQueryable) la memorizzazione nella cache deve essere eseguita al di fuori dell'istruzione Linq.

Inoltre, il caricamento posticipato e il tracciamento degli oggetti sono entrambi grandi no se si intende memorizzare nella cache gli oggetti, il che rende l'esecuzione degli aggiornamenti un po' più complicata.

Chiunque sia riuscito a risolvere questo problema all'interno di un progetto web altamente simultaneo, intervenga e salvi il mondo!:)

Capisco che forse la risposta è un po' tardiva...Tuttavia, puoi provare a LinqToCache progetto.Se possibile, associa un SqlDepdency a una query LINQ arbitraria e fornisce l'invalidazione attiva della cache tramite le notifiche delle query lato server.Le query devono essere query valide per le notifiche, vedere Creazione di una query per la notifica.La maggior parte delle query Linq-to-sql sono conformi a queste restrizioni, purché le tabelle siano specificate utilizzando nomi composti da due parti (dbo.Table, non solo Table).

Vedere il metodo 'GetReferenceData' nella classe 'ReferenceData' in Questo articolo: http://blog.huagati.com/res/index.php/2008/06/23/application-architecture-part-2-data-access-layer-dynamic-linq/

Utilizza la cache della pagina asp.net per memorizzare nella cache i dati recuperati utilizzando L2S.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top