entity-framework - 如何在 ASP.NET Web API(或一般的 REST)中添加/更新类集合导航属性

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

这是一个特定于我正在处理的 Web API 项目的设计问题,但它可能是一个对 REST 原则通用的问题。也有可能我完全想多了。

我在 Entity Framework 中有一个类,它有另一个类的子集合:

public abstract class Tracker
{
    [Key]
    public int ID { get; set; }

    [MaxLength(50)]
    public string Name { get; set; }

    public virtual ICollection<Unit> Units { get; set; }      
}

Unit 类如下所示:

public class Unit
{
    [Key]
    public int ID { get; set; }

    [MaxLength(50)]
    public string Name { get; set; }
}

我正在开发一个 Web API,它将获取跟踪器列表和可用单元列表,然后将特定单元添加到跟踪器的单元列表中。跟踪器和单元有它们自己的 API Controller 和存储库,我正在尝试弄清楚如何修改它们以支持创建此关联,以及请求的外观。

通过 PUT 更新 Tracker 端点 (/Trackers/1) 以将新单元添加到列表中(可能与现有单元一起)是否合适?我将如何在后端处理它?我认为我在使用 PUT 方法时遇到的心理障碍之一是——我是否会将整个子对象包含在请求正文集合属性中?这没有任何意义,但我不确定否则它会如何工作。假设(在我的例子中)是添加到跟踪器列表的单元将是一个已经存在的单元,我们只是在创建关联。我是否应该对这两者使用 DTO 以更简单地完成此操作并相应地映射它们?

或者创建一些新的联合 DTO(如“TrackerUnit”)和相应的端点是否更有意义,我可以通过 POST 到该端点 (POST/TrackerUnits) 添加新的关联,然后在新的 Controller 中处理处理它?我认为它还需要支持 DELETE 来删除项目。我并不喜欢这种方法,因为这个端点不会对应于我系统中的任何实际资源,而只是用于映射这些关联。

最佳答案

如何创建端点:

/Trackers/{id}/units

然后您可以将一个单元发布到此端点以与由 {id} 标识的跟踪器相关联,或类似地:

DELETE /Trackers/{id}/Units/{unitid}

删除一个单元。

关于entity-framework - 如何在 ASP.NET Web API(或一般的 REST)中添加/更新类集合导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16230198/

相关文章:

sql-server - 引入 FOREIGN KEY 约束可能会造成环路或多级联路径。指定删除时不执行任何操作

android - 在没有现有 API 的情况下如何向我的 Android 应用程序添加新内容?

java - Spring 启动: MockMvc returning strange responses

c# - 我们如何在 ASP.NET 身份中实现权限?

c# - JSON.Net 自定义合约序列化和集合

c# - LINQ:使用 "AND"时生成 "OR"表达式而不是 "CONTAINS"

asp.net-mvc - Asp.net MVC4、PostgreSQL 和 SimpleMembership

api - 可以使用 HTTP DELETE 停用记录吗?

html - 为什么我的文件下载链接似乎有效,但找不到该文件?

c# - 如何在我的 .edmx EF 模型中的多个相同模式数据库之间切换?