WebAPI - 添加ForeignKey的odata服务

时间:2013-06-02 20:42:31

标签: asp.net-web-api odata

我正在使用ODataModelBuilder构建我的模型,我正在尝试创建导航属性但是在元数据中我没有看到任何foreginkey指示,在我的解决方案中我没有使用EF,所以没有foreignKey属性,是否可以通过代码添加它?

1 个答案:

答案 0 :(得分:2)

正如您在评论中澄清的那样,您要添加外键信息的原因是您查询主实体时客户端应用程序不包含相关实体。我不认为外键是这里的问题。

例如,我将使用两种实体类型:CustomerOrder。每个Customer都有一些关联的Order,因此我在Customer上有一个名为Orders的导航属性,指向Order的集合。如果我向GET发出/MyService.svc/Customers(1)请求,服务器将回复所有Customer的信息以及指向相关Order实体*的网址。默认情况下,我不会在同一个有效负载中获取每个相关Order的数据。

如果您希望Customers(1)的请求包含其关联的Order的所有数据,您可以将$expand查询选项添加到请求URI:{{1} }。使用WCF数据服务客户端(DataServiceContext),您可以使用/MyService.svc/Customers(1)?$expand=Orders

执行此操作
.Expand()

但是,WebAPI OData目前不支持DataServiceQuery<Customer> query = context.Customers.Expand("Orders"); (尽管最新的每晚版本都会支持,所以很快就会改变)。

另一种方法是单独请求填写缺少的订单数据。您可以使用$expand方法执行此操作:

LoadProperty()

LoadProperty方法应该与今天的WebAPI一起使用。

我知道这不能回答你原来的问题,但我希望能解决你的意图。

*在JSON中,这是WebAPI OData服务的默认格式,没有链接会显示在网络上,但它们仍然存在“精神上”。期望客户端能够自己计算它们,WCF数据服务客户端可以自己计算它们。