linq-to-sql - 使用带有解密层的 LINQ-to-SQL 的 oData/ADO.NET 数据服务

标签 linq-to-sql wcf-data-services odata

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

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

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

现在,我想在其上放置一个 oData 层,以允许从 MS Excel 2010(当它推出时)进行 RESTful 提取。在遇到一些无用的错误消息等之后,我已经可以正常工作了。

但是,显然,那些加密字段仍然是加密的。我的存储库模式会为我解密这些。据我所知,我必须将我的 oData 服务直接绑定(bind)到 LINQ-to-SQL 上下文才能使模式等工作 - 除非我进入一个痛苦的世界(任何 URL 都值得赞赏)。

有没有办法可以将加密/解密层插入到请求中,以便“即时”完成解密?我查看了 DataService 的 OnStartProcessingRequest() 重载,但这似乎没那么有用。

最佳答案

您不必直接绑定(bind)到 L2S 即可公开 OData 服务。 您可以编写自己的 Context 类,并直接使用 Reflection Provider 从您的类公开的 IQueryable 属性推断模型。

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

关键是简单地包装 L2S DataContext 的可查询对象 ( see this ),以便您可以将自己注入(inject)到查询执行中:

  1. 只需将生成的表达式转发到 L2S 并在数据库中运行查询即可。
  2. 当结果从 L2S 返回时,您可以在内存中枚举它们,动态进行解密,然后再将它们返回到数据服务。

有关反射提供程序的更多信息,请查看 this post .

希望这有帮助

Alex James

OData/数据服务项目经理

关于linq-to-sql - 使用带有解密层的 LINQ-to-SQL 的 oData/ADO.NET 数据服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2644243/

相关文章:

OData 选择查询在 ASP.NET WebAPI 测试版中不起作用

sql - 现有数据库的 LINQ to SQL

mysql - MVC2 和 mySQL 数据库

c# - 在更新外键字段之前释放 DataContext

json - 如何禁用内容协商并始终从 WCF 数据服务返回 JSON?

json - 如何在一个请求中更新 OData 实体并修改其导航属性?

mysql - 优化查询或建议 LINQ 等价物

asp.net - 处理响应流时出错。 XML 元素包含混合内容

c# - 摆脱 wcf 数据服务紧耦合

odata - 微软图形 API 使用过滤器获取共享点项目