2009-01-19 10 views
1

Voici mon scénario:Objets CLR SQL pour les opérations lourdes

J'ai implémenté la logique set dans mon framework C#. Les ensembles peuvent contenir une grande quantité d'objets, peut-être même jusqu'à 1 million dans le pire des cas. Supposons que les ensembles contiennent uniquement des listes d'objets appelés Doc. En raison du grand nombre potentiel d'objets, je voudrais donner au développeur le choix de créer et d'utiliser des ensembles.

Pour les petits ensembles, le développeur peut simplement créer un nouvel ensemble et ajouter des objets doc à l'ensemble. La logique d'ensemble normal est disponible comme union, intersection, etc. Le développeur peut alors à tout moment conserver l'ensemble avec ma couche OR dans laquelle l'ensemble aura un ID primaire qui lui est assigné. Pour les très grands ensembles qui sont conservés dans la base de données, je voudrais contourner le processus d'extraction des ID des objets doc de la base de données, puis réinsérer les ID dans l'objet défini en permettant la manipulation de l'ensemble dans le SQL CLR 2008. Je voudrais avoir une simple fonction telle que cette signature:

public void AddSetMembers(int setID, Expression<Func<Doc, bool>> Where) 

Cela permettrait au développeur d'ajouter des documents arbitraires à l'ensemble correspondant à l'expression sans extraire tous les ID de la base de données avec le seul but d'ajouter les à l'ensemble.

Ma question est comment mieux approcher cette implémentation dans une procédure stockée? Puis-je en quelque sorte passer un lambda à une procédure stockée? J'avais pensé à mettre en œuvre une interface IDOC et le charger dans le CLR et ayant une signature telle que:

public void AddSetMembers(int setID, Expression<Func<IDoc, bool>> Where) 

Cependant, je encore besoin de passer le lambda à la SP. Je veux rendre le framework suffisamment flexible pour que le développeur puisse utiliser différentes conditions pour créer des ensembles.

Répondre

1

Vous pouvez passer une chaîne de votre SQL à votre méthode SQL CLR contenant le lambda. Ensuite, compilez cette chaîne dans une fonction/méthode en utilisant les outils de compilation du framework, puis invoquez-la.

+0

Oui, je suis en pleine exploitation en exploitant le CLR SQL2008. L'ensemble lui-même est un objet persistant avec sa propre table composée des ids des objets set. J'avais pensé à utiliser une chaîne pour passer le lambda, puis exposer la procédure de stockage avec une méthode faisant ainsi de la chaîne un lambda correctement typé. – Jiyosub

Questions connexes