【问题标题】:WCF Data Services consuming data from EF based repositoryWCF 数据服务使用基于 EF 的存储库中的数据
【发布时间】:2011-02-18 02:38:23
【问题描述】:

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

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

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

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

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

有没有人有任何关于使用 WCF 数据服务的存储库模式的建议或示例?

【问题讨论】:

  • +1 好问题,这个有什么新的吗?

标签: c# wcf entity-framework repository odata


【解决方案1】:

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

WCF Data Services 和 oData 很新,我也一直在寻找指导,似乎有点薄。

【讨论】:

  • 不,但我还发现 poco 需要使用 IQueryable 定义它们的关系,而不是 T4 生成的 ICollection;你认为这会产生很大的影响吗?
【解决方案2】:

您能否详细说明您想要公开的内容以及谁将使用它?

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

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

几个陷阱....

  1. 如果它是基于 Flash / Flex 的,您将 可能有 Flash / Flex 无法使用 HTTP 放置/合并或删除。你绕过 这通过使用 x-httpmethod-override

  2. 如果是javascript/jquery,make 确定你打开了 json

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

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 2013-06-28
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多