2010-10-02 81 views
0

我有一个使用EF和POCO对象的现有Web应用程序。我想通过WCF(JSON)公开一些对象来改善客户端体验。我有这个工作正常,但我不确定的是如何处理派生的对象(不知道这是否是正确的术语)或IEnumerable匿名对象,如果你愿意。为wcf创建自定义对象

比方说,我有3个表结构如下所示:

模板

ID 
Template 

ID 
Group 

实例

ID 
TemplateID 
GroupID 

这显然是一对多的关系。我的导航属性设置正确,获取强类型的对象属性效果很好。但是,如何通过线路发送序列化的匿名类型对象。就像发送等于groupid = 1的所有实例并包含模板和对象的名称的对象一样。

我缺少的东西或我创建WCF另一个类对象,它应该是这样的:

WCF对象

InstanceID 
TemplateID 
TemplateName 
GroupID 
GroupName 

我想我可以改变我的表占这但这似乎也是错误的。我知道IEnumerable对象不能被序列化,并且我知道扔掉对象可能不是要走的路。我想以正确的方式做到这一点,但我不知道如何去做。

您的建议非常感谢。 Regards

回答

1

根据你在做什么,我建议看看OData与WCF数据服务。您声明您希望能够发送groupid = 1的所有实例 - 在此类型的过滤中,OData非常棒。

如果你想坚持你目前的做法,而不是使用OData,那么我的第一个问题是你为什么要发回匿名类型?你可以做你正在寻找的东西(groupid = 1的所有实例)而不发回匿名类型。在你的select子句中,你只需创建具体对象的新实例,而不是创建匿名类型。如果你的查询真的只是筛选,并没有执行任何有意义的投影与选择匿名类型,那么我没有看到任何理由发回你的匿名类型。

+0

我以为我对OData很熟悉,但我接受了您的建议,并花了一些时间去了解规格,并发现它是我正在寻找的。我想我认为哪里最好的做法只暴露数据表,因为它们存在于数据库作为对象。我不知道如何去公开各种对象属性的集合。 odata.org给出了一些很好的例子。谢谢史蒂夫。 – trevorc 2010-10-04 14:29:25