【问题标题】:oData/ADO.NET Data Services using LINQ-to-SQL with a decryption layeroData/ADO.NET 使用带有解密层的 LINQ-to-SQL 的数据服务
【发布时间】:2010-04-15 09:50:53
【问题描述】:

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

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

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

现在,我想在它上面放置一个 oData 层,以允许从 MS Excel 2010 中提取 RESTful(当它出现时)。在偶然发现一些无用的错误消息等之后,我可以正常工作了。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    希望对你有帮助

    Alex James

    OData / 数据服务项目经理

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      相关资源
      最近更新 更多