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

Posted

技术标签:

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

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

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

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

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

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

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

【问题讨论】:

+1 好问题,这个有什么新的吗? 【参考方案1】:

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

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

【讨论】:

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

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

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

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

几个陷阱....

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

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

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

【讨论】:

以上是关于WCF 数据服务使用基于 EF 的存储库中的数据的主要内容,如果未能解决你的问题,请参考以下文章

分享基于EF+WCF的通用三层架构及解析

WCF、EF 和 UWP

带有 EF CTP 5 CodeOnly DbContext 的 WCF 数据服务

WCF 数据服务和 EF4 CTP5,如何为查询配置默认的急切加载模式?

在类库中使用 WCF 服务时出错

WPF 用户控件库中的 WCF 服务引用