通过 OData/WCF 数据服务对底层 POCO 数据进行 CRUD 操作
我正在尝试用 C#2010 编写一个 OData 服务,该服务通过 JSON 向 jQuery Web 客户端公开一些 POCO,但也允许更新底层数据。我发现了许多通过 OData 的只读 POCO 数据的示例,以及许多通过实体框架和 OData 的可更新数据的示例。
我的问题是数据位于专有数据库中,因此需要一个业务逻辑层来处理数据库更新,但我不知道这在 OData/WCF 数据服务模型中适合什么。我使用 IQueryable 列表填充 POCO 实体并使用 SetEntitySetAccessRule 公开它们,但如何调用业务逻辑/数据模型层中的方法将数据保存到数据库?
我应该使用 SetServiceOperationAccessRule 来公开服务方法吗?如果是这样,有人能给我指一个简单的例子吗?
谢谢
I’m trying to write an OData service in C#2010 that exposes some POCO to a jQuery web client via JSON, but also allows updates to the underlying data. I’ve found lots of examples of read-only POCO data via OData and lots of examples of updatable data via Entity Framework and OData.
My problem is that the data is in a proprietary database so there needs to be a business logic layer to handle the DB updates and I don’t see where this fits in the OData/WCF Data Services model. I’m populating the POCO entities using IQueryable lists and exposing them using SetEntitySetAccessRule, but how do I call a method in the business logic/data model layer to persists data to the DB?
Should I be using SetServiceOperationAccessRule to expose service methods? If so, could anyone point me in the direction of a simple example please?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我的建议是自定义 WCF 数据服务提供程序,以便您可以自定义 IDataServiceUpdateProvider 的实现。 http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx
My suggestion would be a custom WCF Data services provider, so that you can have a custom implementation of IDataServiceUpdateProvider. There is a good blog series at http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx
Rich关于实现IUpdatable/IDataServiceUpdateProvider的建议是正确的。这就是支持更新操作的方式(EF 提供程序实现了此收件箱,反射提供程序则不然,因此您必须自己执行此操作)。
即使使用反射提供程序,您也可以实现 IUpdatable。只需让您的上下文类(作为 T 传递给 DataService 的类)实现 IUpdatable 接口即可。
Rich's suggestion to implement IUpdatable/IDataServiceUpdateProvider is correct. That's the way to support Update operations (the EF provider implements this in-box, the reflection provider doesn't so you have to do that yourself).
You can implement IUpdatable even when using reflection provider. Just make your context class (the one you pass in as T to DataService) implement the IUpdatable interface.