Web服务中的必需属性

时间:2012-04-10 10:17:22

标签: c# .net vb.net wcf odata

我在http://msdn.microsoft.com/en-us/library/dd728281.aspx#Y0检查了代码示例,发现了一件有趣的事情:如果我们从OrderItemData类中删除Public ReadOnly Property Items(),该服务会显示错误。即使我们不尝试访问Items,也只是使用Orders。 有人可以解释为什么需要这个属性吗?

编辑:澄清:该属性未直接使用。我从代码中删除它,它成功编译,但服务返回请求错误:“服务器遇到处理请求的错误。请参阅服务器日志以获取更多详细信息。”而且没有例外。

我认为该服务由于某种原因可能需要IQueryable(Of Item)属性。即使该属性返回Nothing,服务也会再次开始工作:

Public ReadOnly Property Items() As IQueryable(Of Item) 
    Get 
        Return Nothing 
    End Get 
End Property

1 个答案:

答案 0 :(得分:2)

当WCF数据服务使用反射提供程序(这是示例所做的)时,每个实体类型都必须满足以下条件:

  • 它必须是具有一些公共属性的公共类
  • 必须定义关键属性(通过约定或通过DataServiceKey属性)
  • 必须有IQueryable类型的公共属性,其中T是上下文类中的实体类型。

如果删除Items属性,则违反上述规则3。因此,类型Item不再被识别为实体类型(它在内部被视为复杂类型),但随后它在Order类上用作集合的项类型。这意味着它必须是导航属性,但这需要项类型为实体。

如果您正在寻找某种包含(其中的商品只能通过其所属的订单访问),则WCF DS当前不支持此功能。