oData / ADO.NET Data Services с использованием LINQ-to-SQL со слоем дешифрования

Я написал приложение, использующее LINQ-to-SQL, которое отправляет веб-форму в базу данных. Я не использую LINQ-to-SQL, используя шаблон репозитория.

В этом репозитории есть основные методы: Get (), Save () и т. Д.

В рамках развития проекта мне потребовалось зашифровать определенные поля в форме. Это было тривиально, так как я просто добавил вызовы шифрования к методам Get (), Save () в репозитории.

Теперь я хочу наложить на него слой oData, чтобы разрешить извлечение RESTful из MS Excel 2010 (когда он появится). У меня это работает, после нескольких натыканий на бесполезные сообщения об ошибках и т. Д.

Однако очевидно, что эти зашифрованные поля все еще зашифрованы. Мой шаблон репозитория расшифровал бы их за меня. Насколько мне известно, мне нужно напрямую привязать свою службу oData к контексту LINQ-to-SQL, чтобы схема и т. Д. Работала, - если я не войду в целый мир боли (любые URL-адреса приветствуются).

Есть ли способ вставить в запрос свой уровень шифрования / дешифрования, чтобы дешифрование выполнялось «на лету»? Я посмотрел на перегрузку OnStartProcessingRequest () DataService, но это не кажется мне таким полезным.


person Program.X    schedule 15.04.2010    source источник


Ответы (1)


Вам не нужно напрямую связываться с L2S, чтобы предоставить доступ к службе OData. Вы можете написать свой собственный класс Context и напрямую использовать Reflection Provider, чтобы вывести модель из свойств IQueryable, которые предоставляет ваш класс.

Примечание. В подходе L2S, который вы используете, также используется провайдер Reflection.

Ключом к этому является простая упаковка запросов L2S DataContext (см. это), чтобы вы могли участвовать в выполнении запроса:

  1. Просто отправьте сгенерированное выражение в L2S и запустите запрос в базе данных.
  2. Поскольку результаты возвращаются из L2S, вы можете затем перечислить их в памяти, выполняя дешифрование на лету, прежде чем возвращать их в службы данных.

Для получения дополнительной информации о поставщике отражения посетите этот пост.

Надеюсь это поможет

Алекс Джеймс

Менеджер программы OData / Data Service

person Alex James    schedule 15.04.2010