2011-08-03 150 views
2

我想创建使用实体框架的WCF数据服务项目。 (我对这两个都是新手)。wcf数据服务与实体框架

我使用数据库创建实体。 现在,我创建了服务操作,它返回IQueryable<entity>

我的问题是

  1. 我不想回整组列在实体。我不能将它们从实体中删除,因为它不为空。如何避免这些?

  2. 我有几个FK列,我需要表中的其他列详细信息。如何包含来自其他表的列?

  3. 为什么无法使用POCO类从WCF数据服务返回?

  4. 如何格式化响应;即增加一些更多的细节,如页码等响应,更改xml标签,删除一些细节,如“链接rel”?

我已经尝试了很多东西来实现1和2.但最后我意识到我只能使用实体,因为它是使它的工作。

我不知道约4.

任何意见,将不胜感激。

回答

1

1.我不想返回整个实体中的一组列。
2.我有几个FK列,我需要 表的其他列详细信息。

为此,您应该定义一个新的类,以匹配您需要的/您希望客户看到的内容。这可以是一个直接的POCO课程 - 没有特殊要求。为每个实体组装该类,省去不需要的列,并将FK列的额外字段抓取到新类中。直接返回IQueryable<YourNewClass>而不是实体类。

为了避免巨大的左派赋值语句来填充新类的属性,您应该看看AutoMapper,这使得可以很容易地在各个彼此非常相似的类中进行复制(例如,丢失或添加一些属性)。

4.如何格式化响应;即向页面号等 响应添加更多的细节,更改xml标记,删除像“链接rel”这样的一些细节 ?

这是不可能的 - OData协议非常严格的定义发生了什么事情是在消息中,哪些链接有等,如果你不能忍受的 - 你必须推出自己的WCF REST服务并完全放弃WCF数据服务。

如果您想更彻底地调查该路线,请查看WCF REST Developer Center on MSDN

更新:该链接似乎已经死了 - 尝试WCF Web Http Programming Overview而不是。

+0

我做你的建议为点1和2,我得到错误“服务器遇到任何一个异常消息是'On data context type'GamesContext',有一个顶级的IQueryable属性'Games',其元素类型不是实体类型,请确保IQueryable属性是实体类型或指定IgnoreProperties属性上的数据上下文类型忽略此属性'。查看服务器日志以获取更多详细信息。异常堆栈跟踪是:“跟随此:http://msdn.microsoft.com/en-us/gg601461 – genericuser

+0

@ Priya10:似乎是一个[有几个解决方法的已知问题](http://samuelmueller.com/2009/11/working-with-projections-and-dtos-in-wcf-data-services/) - 希望这可能会帮助你! –

+0

@marc_s该链接似乎已经死了,我得到那个错误 – Maslow

0

确保您有一个Id属性或您指定[Key][DataServiceKey("Your_Custom_ID_Property")] 对于我整理出了这问题