Domanda

Come sarebbe facile scrivere un provider di LINQ muto che può solo usare le mie definizioni di classi (che non hanno alcun riferimento oggetto come proprietà) e mi danno la SQL tradotto. Può assumere il nome delle proprietà e le colonne di essere stesso nonché i nomi delle classi e delle tabelle sottostanti. Potete per favore darmi alcune indicazioni.?

È stato utile?

Soluzione

Mi ci sono voluti circa 4 mesi di lavoro a tempo pieno (8 ore al giorno) per costruire una stalla, erogatori di lavoro che implementa l'intera specifica di LINQ. Direi che ho avuto una molto semplice, buggy e la versione instabile dopo circa tre settimane, quindi se siete solo in cerca di qualcosa di ruvido direi che probabilmente stai guardando qualsiasi cosa, da una settimana fino a due mesi a seconda di come sei bravo sono e quali tipi di requiements che avete.

Vi segnalo il blog Wayward per questo, Matt ha scritto un ottimo procedura dettagliata su come implementare un provider di LINQ, e anche se si sta probabilmente non sarà in grado di copiare e incollare, vi aiuterà per fare i conti con il modo di pensare quando si lavora. Potete trovare Matt's procedura dettagliata qui: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx . Vi consiglio di andare su di esso allo stesso modo Matt fa, ed estendere il visitatore albero di espressione Matt include nella seconda parte del suo tutorial.

Inoltre, quando ho cominciato a lavorare con questo, ho avuto così tanto aiuto da parte del visualizzatore albero di espressione, è davvero fatto l'analisi di un molto più semplice una volta che si potrebbe vedere come LINQ analizzati alle query.

Costruire un provider è davvero un sacco di divertimento, anche se un po 'frustrante, a volte. Auguro a tutti buona fortuna!

Altri suggerimenti

Dare un'occhiata alla LINQExtender progetto, è un toolkit per la creazione di fornitori di LINQ personalizzato.

Un'altra opzione per dare una gamba sembra essere ri-LINQ , che è un framework per la creazione di fornitori di LINQ personalizzato.

Ecco il e una panoramica bel (pdf) di ciò che è coinvolto nella scrittura di uno.

Ho scritto una serie di tutorial sul mio blog di base sulla mia esperienza nello sviluppo di un fornitore di LINQ to SQL da zero, a partire dalla fase di composizione albero di espressione (chiamando i metodi di LINQ), proseguendo con il visitatore espressione, abbattendo della query in componenti, l'analisi della clausola in cui, generando il testo e il parametro e, infine, la compilazione il tutto in iL utilizzando lo spazio di espressione NET.

Ho visto molti messaggi incompleti che ha promesso di spiegare come scrivere un provider, che cade molto breve del marchio, a malapena di graffiare la superficie e in realtà non consegnare nulla di lontanamente eseguibile.

La serie di blog che ho scritto in base alla mia esperienza ha un progetto di esempio disponibile per il download con la semplice provider che copre solo la funzionalità richiesta dall'esempio tutorial. Tuttavia, essa comprende anche la versione di produzione supportante una pluralità di operazioni (dove, unire, prima, contano, all'inizio, ecc), subqueries, istruzioni nidificate, ed ecc Inoltre, produce uno SQL più pulito di un sacco di quello che' ve visto da Entità e LINQ to SQL. Non c'è nidificazione inutili / ridondante, avvolgendo tutto tra parentesi ed ecc.

Per chiunque con un buon livello di pensiero astratto, lo sviluppo di un provider non è un numero di set di tale compito difficile, fuori per essere. Ho sviluppato uno che è utilizzata in ambiente di produzione in circa 3 mesi di lavoro a tempo parziale (il che significa qualche sera e nei fine settimana). Da ottenere andare si era rivolto con le prestazioni e SQL ordinata in mente - un obiettivo ha realizzato.

E 'stato un po' difficile trovare il tempo per pubblicare questo materiale, ma ho pensato - se può aiutare qualcuno là fuori, non c'è ragione per questa esperienza per andare a rifiuti:

Ho creato un progetto ' LinqToAnything ', che è stato progettato per rendere molto molto facile da implementare un (semplice), fornitore di LINQ.

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