使用Entity Framework的wcf数据服务

时间:2011-08-03 17:12:38

标签: entity-framework wcf-data-services

我正在尝试使用Entity Framework创建WCF数据服务项目。 (我对两者都不熟悉。)

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

我的问题是

  1. 我不想返回实体中的整个列集。我无法从实体中删除它们,因为它不是null。如何避免这些?

  2. 我的FK列很少,我需要表的其他列详细信息。如何在其他表中包含列?

  3. 为什么不能使用PCOO类从WCF数据服务返回?

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

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

    我不知道4。

    任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

  

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

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

为了避免巨大的左右赋值语句只是为了填充新类的属性,你应该看一下AutoMapper,这样可以很容易地复制彼此非常相似的类(例如,缺少或添加一些属性。)

  

4。如何格式化响应;即,添加更多细节   像页码等响应,更改xml标签,删除一些细节   比如“link rel”?

这是不可能的 - OData协议非常严格地定义了消息中的内容,有什么链接等等。如果你不能忍受 - 你将不得不推出自己的WCF REST服务并放弃WCF数据服务的全部内容。

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

更新:该链接似乎已经死亡 - 请尝试使用WCF Web Http Programming Overview

答案 1 :(得分:0)

确保您拥有Id媒体资源,或指定[Key][DataServiceKey("Your_Custom_ID_Property")] 对我来说,这解决了问题