我正在尝试使用Entity Framework创建WCF数据服务项目。 (我对两者都不熟悉。)
我使用DB创建实体。
现在,我创建了服务操作,它返回IQueryable<entity>
。
我的问题是
我不想返回实体中的整个列集。我无法从实体中删除它们,因为它不是null。如何避免这些?
我的FK列很少,我需要表的其他列详细信息。如何在其他表中包含列?
为什么不能使用PCOO类从WCF数据服务返回?
如何格式化响应;即,为响应添加更多细节,如页码等,更改xml标签,删除一些细节,如“link rel”?
我已经尝试了很多东西来实现1和2.但最后我意识到我只能使用实体来使它工作。
我不知道4。
任何建议都将不胜感激。
答案 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")]
对我来说,这解决了问题