【问题标题】:Foreign key for same table in Web Api 2Web Api 2中同一张表的外键
【发布时间】:2015-04-15 00:43:19
【问题描述】:

我有一个数据模型,它具有通过数据定义的文件夹结构。各种对象可以在这些文件夹中,包括文件夹本身,类似于 Explorer 中的文件夹如何级联并且可以相互包含。

我想我已经弄清楚了外键在这个堆栈中是如何工作的,但是当我将它迁移到数据库时,系统不会让我这样做。有什么问题?必须有一种方法可以将这些文件夹条目相互嵌套,对吧?

namespace api.Models
{
    public class Folder
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }

        public int SuperFolderId { get; set; }
        public Folder SuperFolder { get; set; }
    }
}

【问题讨论】:

    标签: asp.net-mvc-5 foreign-keys entity-framework-6 asp.net-web-api2


    【解决方案1】:

    这里的疏忽是自引用外键不能为空。想象一个文件结构,其中每个文件夹都需要一个超级文件夹。它要么永远上升,要么两个文件夹必须相互引用,然后循环。

    这与员工拥有经理的经典自引用关键示例相同,其中经理也在 Employee 表中。在到达公司负责人之前,您只能在链条上走这么远。

    系统假定外键不可为空,因此不需要 [Required] 属性就需要它们。有时将外键设为可选是有效的,为此,您将 int 转换为可为空的 int 或“int?”。下面的代码解决了这个问题。

    namespace api.Models
    {
        public class Folder
        {
            public int Id { get; set; }
            [Required]
            public string Name { get; set; }
    
            public int? SuperFolderId { get; set; }
            public Folder SuperFolder { get; set; }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多