我正在使用ODataModelBuilder构建我的模型,我正在尝试创建导航属性但是在元数据中我没有看到任何foreginkey指示,在我的解决方案中我没有使用EF,所以没有foreignKey属性,是否可以通过代码添加它?
答案 0 :(得分:2)
正如您在评论中澄清的那样,您要添加外键信息的原因是您查询主实体时客户端应用程序不包含相关实体。我不认为外键是这里的问题。
例如,我将使用两种实体类型:Customer
和Order
。每个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数据服务客户端可以自己计算它们。