Pergunta

Eu escrevi um aplicativo usando o LINQ-para-SQL que envia um formulário da Web em um banco de dados. Eu absorve o LINQ para SQL usando um padrão de repositório.

Este repositório possui os métodos básicos: get (), save (), etc.

Como desenvolvimento do projeto, eu precisava criptografar certos campos no formulário. Isso foi trivial, pois acabei de adicionar as chamadas de criptografia aos métodos get (), salvar () no repositório.

Agora, quero colocar uma camada de odata sobre ela, para permitir uma extração repousante do MS Excel 2010 (quando for lançado). Eu tenho esse funcionamento, depois de alguns tropeços em mensagens de erro inúteis, etc.

No entanto, obviamente, esses campos criptografados ainda são criptografados. Meu padrão de repositório teria descriptografado isso para mim. Até onde eu sei, tenho que ligar diretamente meu serviço de odata ao contexto LINQ-para-SQL para o esquema, etc. para trabalhar-a menos que eu entre um mundo inteiro de dor (quaisquer URLs apreciados).

Existe uma maneira de inserir minha camada de criptografia/descriptografia na solicitação para que a descriptografia seja feita "na mosca"? Eu olhei para a sobrecarga de DataService OnStartProcessingRequest (), mas isso não parece tão útil.

Foi útil?

Solução

Você não precisa se ligar diretamente ao L2S para expor um serviço ODATA. Você pode escrever sua própria classe de contexto e usar o provedor de reflexão diretamente para inferir um modelo das propriedades iQueryable que sua classe expõe.

Nota: A abordagem L2S que você está usando também está usando o provedor de reflexão.

A chave para isso é simplesmente envolver as consultas do Datacontext L2S (Veja isso) para que você possa injetar -se na execução da consulta:

  1. Basta encaminhar a expressão gerada para L2s e executar a consulta no banco de dados.
  2. À medida que os resultados são retornados de L2s, você pode enumerá -los na memória, fazendo a descriptografia em tempo real, antes de devolvê -los aos serviços de dados.

Para obter mais informações sobre o provedor de reflexão, consulte esta postagem.

Espero que isto ajude

Alex James

ODATA / Data Service Program Manager

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top