3

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

到目前为止,我们已经开发了一个具有 IQueryable 属性的类,getter 触发了存储库的“获取所有用户”方法。到目前为止,问题有两个方面:

1) 需要我们修饰 poco 对象的 ID 字段,告诉数据服务哪个字段是 id。现在这意味着我们的 POCO 对象不是“纯”的。

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

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

有没有人有任何建议或示例将存储库模式与 WCF 数据服务一起使用?

4

2 回答 2

0

我想这是一个务实的问题。装饰 POCO 会破坏其他任何东西吗?如果没有,也许这是最好的方法。

WCF 数据服务和 oData 是相当新的,我也一直在寻找指导,它似乎有点薄。

于 2010-05-11T13:07:16.153 回答
0

您能否进一步扩展您想要公开的内容以及谁将使用它?

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

  • 拥有一个 MyRepository : Objectcontext 和一个 MyDataService : DataService 拆分逻辑,所以我们创建了助手。我想我们可以继承 Repository - (实际上只是在我输入这个时想到的!)
  • 查询和更改拦截器是您的朋友,但应委托给助手(或基类)以确保 DRY。即 - 如果您的存储库已经有 GetAllUsers,并且执行 myservice.svc/Users 无法处理的逻辑,您可能需要实现一个查询拦截器来进行过滤 - DRY 再次表示存储库的帮助器(或基本方法)并且拦截器可以使用。
  • asp.net 兼容性允许您很好地利用身份验证/授权 - 在查询拦截器中,这是确保您只被允许看到您被允许看到的东西的好方法。

几个陷阱......

  1. 如果它是基于 Flash / Flex 的,您可能会遇到 Flash / Flex 无法使用 HTTP PUT/MERGE 或 DELETE 的问题。你可以通过使用 x-httpmethod-override 来解决这个问题

  2. 如果是 javascript / jquery,请确保打开 json

总的来说,我真的很喜欢它,这是一种公开 API 的超快速方式,并且只要您没有繁重的业务逻辑,它就可以很好地工作。

于 2011-05-13T07:26:42.430 回答