【问题标题】:CRUD Operations on Underlying POCO data via OData/WCF Data Services通过 OData/WCF 数据服务对基础 POCO 数据进行 CRUD 操作
【发布时间】:2012-02-28 01:49:35
【问题描述】:

我正在尝试用 C#2010 编写一个 OData 服务,它通过 JSON 向 jQuery Web 客户端公开一些 POCO,但也允许更新底层数据。我通过 OData 找到了很多只读 POCO 数据的示例,以及通过 Entity Framework 和 OData 找到了很多可更新数据的示例。

我的问题是数据位于专有数据库中,因此需要有一个业务逻辑层来处理数据库更新,我看不出这在 OData/WCF 数据服务模型中的位置。我使用 IQueryable 列表填充 POCO 实体并使用 SetEntitySetAccessRule 公开它们,但是如何调用业务逻辑/数据模型层中的方法将数据持久保存到数据库?

我应该使用 SetServiceOperationAccessRule 来公开服务方法吗?如果是这样,任何人都可以指出一个简单示例的方向吗?

谢谢

【问题讨论】:

    标签: wcf poco odata crud


    【解决方案1】:

    我的建议是自定义 WCF 数据服务提供程序,以便您可以自定义 IDataServiceUpdateProvider 实现。 http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx有一个很好的博客系列

    【讨论】:

    • 感谢您的回复,作为一个对此非常陌生的人,它看起来需要大量的工作来实现。放弃 OData 方法并实现 SOAP 服务会更好吗?这样我就可以在 POCO 中公开 CRUD 功能并从 jQuery 中调用它?
    【解决方案2】:

    Rich 实现 IUpdatable/IDataServiceUpdateProvider 的建议是正确的。这就是支持更新操作的方式(EF 提供者实现了这个收件箱,反射提供者没有,所以你必须自己做)。 即使使用反射提供程序,您也可以实现 IUpdatable。只需让你的上下文类(作为 T 传递给 DataService 的那个)实现 IUpdatable 接口。

    【讨论】:

    • 所以对于已经有public IQueryable<Product> Products 属性的上下文类,我只需创建另一个属性,例如public IUpdatable<Product> UpdateProduct,我可以使用HTTP PUT 调用它吗?
    • 上下文类本身必须实现接口:
    • (对不起)就像“class MyContext: IUpdatable { ... }”,你实现了接口定义的所有方法/属性。
    • 感谢@Vitek,我现在了解如何实现 IUpdatable。对我来说,编写自定义 DSP 似乎需要做很多工作,现在认为 WCF 数据服务不是在这种情况下使用的正确技术。我相信 SOAP 服务会更适合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多