oData / ADO.NET Data Services, использующие LINQ-to-SQL со слоем расшифровки - PullRequest
2 голосов
/ 15 апреля 2010

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

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

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

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

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

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

1 Ответ

3 голосов
/ 15 апреля 2010

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

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

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

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

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

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

Алекс Джеймс

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

...