2010-04-15 10 views
2

J'ai écrit une application en utilisant LINQ-to-SQL qui soumet un formulaire Web dans une base de données. J'absacte le LINQ-to-SQL en utilisant un pattern Repository.oData/ADO.NET Data Services utilisant LINQ-to-SQL avec une couche de décryptage

Ce référentiel a les méthodes de base: Get(), Save(), etc.

En tant que développement du projet, je devais chiffrer certains champs du formulaire. C'était trivial, car je viens d'ajouter les appels de chiffrement aux méthodes Get(), Save() dans le Repository.

Maintenant, je veux mettre un calque oData dessus, pour permettre l'extraction RESTful de MS Excel 2010 (quand il sort). J'ai ceci fonctionnant, après quelques trébuchements sur des messages d'erreur inutiles, etc.

Cependant, évidemment, ces champs cryptés sont toujours cryptés. Mon modèle de dépôt aurait décrypté ceux-ci pour moi. Autant que je sache, je dois directement lier mon service oData au contexte LINQ-to-SQL pour que le schéma, etc. fonctionne - à moins que j'entre dans un monde entier de douleur (toutes les URL appréciées).

Est-il possible d'insérer ma couche de cryptage/décryptage dans la requête afin que le décryptage soit effectué "à la volée"? J'ai regardé la surcharge OnStartProcessingRequest() de DataService mais cela ne semble pas utile.

Répondre

3

Vous n'avez pas besoin de lier directement à L2S pour exposer un service OData. Vous pouvez écrire votre propre classe Context et utiliser le Reflection Provider Directement pour déduire un modèle des propriétés IQueryable exposées par votre classe. Remarque: l'approche L2S que vous utilisez utilise également le fournisseur Reflection.

La clé est simplement d'emballer les queryables de L2S DataContext (see this) afin que vous puissiez vous injecter dans l'exécution de la requête:

  1. acheminera l'expression générée à L2S et exécuter la requête dans la base de données. Lorsque les résultats sont renvoyés depuis L2S, vous pouvez ensuite les énumérer en mémoire en effectuant le décryptage à la volée, avant de les renvoyer à Data Services.

Pour plus d'informations sur Reflection Provider, consultez this post.

Hope this helps

Alex James

OData/Programme de service Data Manager