Asp.net web api WebAPI-odata服务添加ForeignKey

Asp.net web api WebAPI-odata服务添加ForeignKey,asp.net-web-api,odata,Asp.net Web Api,Odata,我正在使用ODataModelBuilder构建模型,我正在尝试创建导航属性,但是在元数据中我看不到任何foreginkey指示,在我的解决方案中我没有使用EF,因此没有foreginkey属性,是否可以通过代码添加它?,正如您在评论中阐明的,您希望添加外键信息的原因是,在查询主实体时,客户端应用程序不包括相关实体。我不认为外键是这里的问题 例如,我将使用两种实体类型:Customer和Order。每个Customer都有一些相关的Orders,因此我在Customer上有一个名为Orders的

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

,正如您在评论中阐明的,您希望添加外键信息的原因是,在查询主实体时,客户端应用程序不包括相关实体。我不认为外键是这里的问题

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

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

LoadProperty方法应该与WebAPI配合使用,就像现在一样

我知道这并不能回答你最初的问题,但我希望能解决你的意图


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

只是想澄清一下:您的意思是,在$metadata文档中,您希望在您的
关联中看到
ReferentialConstraint
元素吗?或者,您只是想弄清楚如何使用ODataModelBuilder在两个实体集之间创建导航?我能够创建导航属性,但当我使用wcf数据代理进行测试时-当我查询主对象时,相关实体为空,虽然我可以在sniffer中使用,但我猜它与wcf数据代理的外键相关,我猜您指的是DataServiceContext类(以及相关类)?我想我现在明白你的问题了,我不认为这与外键有关(我将在下面回答)。但我感到困惑的是,你说相关实体数据在嗅探有效负载时显示出来——你是说你看到了相关实体的链接吗?还是属于相关实体的实际数据?我希望,除非在请求URI中包含
$expand
查询选项,否则相关实体的实际数据不应该存在。基本上,我使用的是expand和night builds,我使用BreezeJS->对其进行测试,并填充相关实体的字体,我将尝试使用wcf客户端进行扩展我已经使用wcf测试客户端进行了测试,loadproperty有效,但是expand没有从浏览器中执行$expand工作?我认为“如何在WebAPI中启用$expand”是一个单独的问题。很高兴LoadProperty能为您工作:)奇怪,现在我用fiddler重新测试了它,扩展不起作用可能$expand对
/MyService.svc/Customers
有效,但对
/MyService.svc/Customers(1)
无效?至少,这是我遇到的一个问题。
DataServiceQuery<Customer> query = context.Customers.Expand("Orders");
context.LoadProperty(customer, "Orders");