2010-04-15 6 views
2

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

Это хранилище имеет основные методы: Get(), Save() и т.д.

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

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

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

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

ответ

3

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

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

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

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

Дополнительную информацию об Reflection Provider вы найдете this post.

Надеется, что это помогает

Alex James

OData/Program Service Data Manager