Linq to sql oData/ADO.NET数据服务使用LINQ to SQL和解密层

Linq to sql oData/ADO.NET数据服务使用LINQ to SQL和解密层,linq-to-sql,wcf-data-services,odata,Linq To Sql,Wcf Data Services,Odata,我已经使用LINQtoSQL编写了一个应用程序,它将web表单提交到数据库中。我使用存储库模式将LINQ抽象为SQL 此存储库具有基本方法:Get()、Save()等 作为项目的开发,我需要对表单中的某些字段进行加密。这很简单,因为我刚刚在存储库中的Get()、Save()方法中添加了加密调用 现在,我想在其上放置一个oData层,以允许从MSExcel2010(发布时)进行RESTful提取。我有这个工作,在一些无用的错误消息等绊倒 但是,显然,这些加密字段仍然是加密的。我的存储库模式会为我解

我已经使用LINQtoSQL编写了一个应用程序,它将web表单提交到数据库中。我使用存储库模式将LINQ抽象为SQL

此存储库具有基本方法:Get()、Save()等

作为项目的开发,我需要对表单中的某些字段进行加密。这很简单,因为我刚刚在存储库中的Get()、Save()方法中添加了加密调用

现在,我想在其上放置一个oData层,以允许从MSExcel2010(发布时)进行RESTful提取。我有这个工作,在一些无用的错误消息等绊倒

但是,显然,这些加密字段仍然是加密的。我的存储库模式会为我解密这些。据我所知,我必须直接将我的oData服务绑定到LINQtoSQL上下文,以使模式工作,等等——除非我进入一个痛苦的世界(任何URL)


是否有一种方法可以将加密/解密层插入到请求中,以便“即时”完成解密?我查看了DataService的OnStartProcessingRequest()重载,但这似乎没有多大用处。

您不必直接绑定到L2S来公开OData服务。 您可以编写自己的上下文类,并直接使用反射提供程序从类公开的IQueryable属性推断模型

注意:您使用的L2S方法也只是使用反射提供程序

关键是简单地包装L2S DataContext的queryables(),这样您就可以将自己注入到查询执行中:

  • 只需将生成的表达式转发到L2S并在数据库中运行查询
  • 当结果从L2返回时,您可以在将它们返回到数据服务之前,在内存中动态地进行解密,然后枚举它们
  • 有关反射提供程序的更多信息,请查看

    希望这有帮助

    OData/数据服务项目经理