WCF数据服务使用基于EF的存储库中的数据

时间:2010-05-11 11:31:33

标签: c# wcf entity-framework repository odata

我们有一个基于EF4 / POCO的现有存储库,运行良好。我们希望使用WCF数据服务添加服务层,并寻找一些最佳实践建议。

到目前为止,我们已经开发了一个具有IQueryable属性的类,并且getter触发了存储库'get all users'方法。到目前为止,问题有两方面:

1)它要求我们装饰poco对象的ID字段,告诉数据服务哪个字段是id。这意味着我们的POCO对象不是'纯'。

2)它无法弄清楚对象之间的关系(我猜这很明显)。

我现在已经停止了这种方法,我想也许我们应该从存储库中公开OBjectContext并使用EF的更多“自动”功能。

是否有人对WCF数据服务使用存储库模式有任何建议或示例?

2 个答案:

答案 0 :(得分:0)

我想这是一个务实的问题。装饰POCO会破坏别的吗?如果没有,也许这是最好的方式。

WCF数据服务和oData都很新,我一直在寻找指导,看起来有点薄。

答案 1 :(得分:0)

您是否可以进一步扩展您想要展示的内容,以及谁将使用它?

到目前为止我在项目中看到的问题

  • 拥有一个MyRepository:Objectcontext和一个 MyDataService:DataService拆分逻辑,所以我们已经 创造了帮手。我想我们可以继承Repository - (字面意思只是想到了我输入的内容!)
  • 查询和更改拦截器是你的朋友,但是 应该委托给助手(或基类)来确保 干。即 - 如果您的存储库已经存在 有GetAllUsers,并做了逻辑 myservice.svc /用户无法处理, 您可能需要实现查询 拦截器做过滤 - DRY再次表示两者的辅助(或基本方法) 存储库和拦截器都可以 使用。
  • asp.net兼容性允许你 很好地接受认证/ 授权 - 在查询中 拦截器,这是一个很好的方式 确保你只能看到 你可以看到的东西。

一些陷阱......

  1. 如果是Flash / Flex,你会的 可能有Flash /的问题/ Flex无法使用HTTP PUT / MERGE或DELETE。你绕开了 这可以通过使用x-httpmethod-override

  2. 来实现
  3. 如果是javascript / jquery,请make 确定你打开了json

  4. 总的来说,我非常喜欢它,这是一种公开API的超快方式,如果您没有繁重的业务逻辑,它运行良好。