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 CTP 5 CodeOnly DbContext 的 WCF 数据服务