我正在使用 ODataModelBuilder 构建我的模型,我正在尝试创建导航属性但是在元数据中我没有看到任何前键指示,在我的解决方案中我没有使用 EF,所以没有 foreignKey 属性,是否可以通过添加它代码?
1 回答
正如您在评论中阐明的那样,您要添加外键信息的原因是因为您的客户端应用程序在查询主实体时不包括相关实体。我不认为外键是这里的问题。
例如,我将使用两种实体类型:Customer
和Order
. 每一个Customer
都有一些关联Order
的 s,所以我有一个导航属性,它指向一个s 的Customer
集合。如果我向 发出请求,服务器将响应所有 的信息以及指向相关实体的 URL*。默认情况下,我不会在同一有效负载中获取每个相关的数据。Orders
Order
GET
/MyService.svc/Customers(1)
Customer
Order
Order
如果您希望请求Customers(1)
包含其关联Order
s 的所有数据,您可以将$expand
query 选项添加到请求 URI:/MyService.svc/Customers(1)?$expand=Orders
中。使用 WCF 数据服务客户端 (DataServiceContext),您可以这样做.Expand()
:
DataServiceQuery<Customer> query = context.Customers.Expand("Orders");
但是,WebAPI OData 目前不支持$expand
(最新的夜间版本支持,所以这很快就会改变)。
另一种方法是发出单独的请求来填写缺失的订单数据。您可以使用以下LoadProperty()
方法执行此操作:
context.LoadProperty(customer, "Orders");
LoadProperty 方法应该与目前的 WebAPI 一起使用。
我知道这不能回答你原来的问题,但我希望能解决你的意图。
*在 JSON 中,这是 WebAPI OData 服务的默认格式,在线路上不会显示任何链接,但它们仍然“在精神上”存在。客户端应该能够自行计算它们,WCF 数据服务客户端会这样做。