2009-04-03 6 views
4

Comme il serait facile d'écrire un fournisseur LINQ idiot qui peut simplement utiliser mes définitions de classe (qui n'ont pas de références d'objet en tant que propriétés) et me donner le SQL traduit. Il peut supposer que le nom des propriétés et des colonnes est identique, ainsi que les noms des classes et des tables sous-jacentes. Pouvez-vous s'il vous plaît me donner quelques indications?Fournisseur LINQ simple (Dumb)

Répondre

5

Il m'a fallu environ 4 mois de travail à temps plein (8 heures par jour) pour construire un fournisseur de travail stable qui implémente l'ensemble des spécifications de linq. Je dirais que j'ai eu une version très simple, buggée et instable après environ trois semaines, donc si vous cherchez juste quelque chose de rugueux, je dirais que vous regardez probablement quelque chose d'une semaine à deux mois selon la façon dont vous sont et quels types de requiements vous avez.

Je dois vous signaler le blog Wayward pour cela, Matt a écrit une très bonne procédure pas à pas pour implémenter un fournisseur linq, et même si vous ne serez probablement pas capable de copier et coller, cela aidera vous apprendre à réfléchir quand vous travaillez. Vous pouvez trouver la solution de Matt ici: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx. Je vous recommande d'y aller de la même manière que Matt, et d'étendre le visiteur de l'arbre d'expression que Matt inclut dans la deuxième partie de son tutoriel. De plus, quand j'ai commencé à travailler avec cela, j'ai eu tellement d'aide de l'outil de visualisation de l'arbre d'expression, que cela a vraiment facilité l'analyse syntaxique quand on a vu comment linq était analysé.

Construire un fournisseur est vraiment très amusant, même si c'est un peu frustrant par moments. Je vous souhaite bonne chance à tous!

4

Donnez un coup d'oeil au projet LINQExtender, est un kit d'outils pour créer des fournisseurs LINQ personnalisés.

3

Une autre option pour vous donner une longueur d'avance semble être re-linq qui est un cadre pour créer des fournisseurs LINQ personnalisés.

Voici le Source code et un joli overview (pdf) de ce qui est impliqué dans l'écriture d'un.

0

J'ai créé un projet 'LinqToAnything' qui est conçu pour rendre très facile la mise en place d'un fournisseur (simple) Linq.

1

J'ai écrit une série de tutoriels sur mon blog sur mon expérience de développement d'un fournisseur LINQ-to-SQL, en commençant par l'étape de composition de l'arbre d'expression (en appelant les méthodes LINQ), en continuant de la requête en composants, en analysant la clause where, en générant le texte et le paramètre et, finalement, en compilant le tout dans IL en utilisant l'espace de noms d'expression .NET.

J'ai vu beaucoup de messages incomplets qui promettaient d'expliquer comment écrire un fournisseur, tombant très en deçà de la cible, grattant à peine la surface et ne livrant réellement rien d'exécutable à distance.

La série de blog que j'ai écrite sur la base de mon expérience a un exemple de projet disponible au téléchargement avec le fournisseur simple qui couvre seulement la fonctionnalité requise par l'exemple de tutoriel. Cependant, il inclut aussi la version de production supportant un certain nombre d'opérations (où, join, first, count, top, etc.), les sous-requêtes, les instructions imbriquées, etc. De plus, il produit un SQL plus propre que beaucoup de vu depuis Entities et LINQ-to-SQL. Il n'y a pas d'imbrication inutile/redondante, tout ce qui est entre parenthèses, etc.

Pour quiconque a un bon niveau de réflexion abstraite, développer un tel fournisseur n'est pas une tâche aussi difficile que celle que beaucoup ont définie.J'ai développé celui qui est utilisé dans l'environnement de production dans environ 3 mois de travail à temps partiel (ce qui signifie certains soirs et week-ends). Dès le départ, il était axé sur la performance et le bon ordre SQL - un objectif atteint.

Il était un peu difficile de trouver le temps de publier ce document, mais je pensais - si elle peut aider quelqu'un là-bas, il n'y a aucune raison pour que cette expérience pour aller à déchets: