Web API 2中的外键 - 最佳实践?

时间:2014-10-08 14:13:37

标签: entity-framework rest asp.net-web-api asp.net-web-api2

基本上我在后端使用Web API 2和Entity Framework编写API。

我不确定的是我的模型上的外键应该怎么做。

假设我使用订单属性的外键获得 person 属性。

有时客户需要人物财产,有时却不需要。我应该怎么做呢?

我应该创建2种方法: / api / person / 1< - 返回没有订单的人 / api / personwithorder / 1< - 返回订单人

在我看来,似乎有很多方法。

我知道可查询属性也存在,它支持客户端使用$ extend参数随意包含属性 - 但是如果可以避免,我宁愿不使用可查询属性。

你有什么建议?

2 个答案:

答案 0 :(得分:2)

在我的头顶,这里有一些选择。

选项1

API中的多种方法

public Person GetPerson() { ... }
public Person GetPersonWithOrders() { ... }

选项2

将标志传递给方法:

public Person GetPerson(bool getOrders) { ... }

选项3

您可以使用OData来允许调用者查询数据。

答案 1 :(得分:2)

要扩展DavidG使用OData的选项3,您可以按照以下方式进行操作:

  1. Install-package Microsoft.AspNet.WebApi.OData

  2. 创建一个继承自PeopleController

  3. ODataController
  4. 配置Web API OData模型如下:

    modelBuilder.EntitySet<Person>("People");

  5. Get方法定义为返回IQueryable<Person>

  6. 在您的调用代码中,将expand子句添加到URL以指定您要公开的子对象,如下所示:/api/People(1)?$expand=Orders

  7. 关于注册OData路由还有一点点,但这是你可以在任何sample project中找到的所有标准配置。

    OData非常灵活,可以处理大量有关如何构建网址的问题。

相关问题