Asp.net mvc 5 Web Api 2中相同表的外键
我有一个数据模型,它有一个通过数据定义的文件夹结构。不同的对象可以位于这些文件夹中,包括文件夹本身,这与资源管理器中的文件夹级联方式类似,并且可以相互包含 我想我已经弄清楚了外键在这个堆栈中是如何工作的,但是当我将它迁移到数据库时,系统不会允许我这样做。有什么问题吗?一定有办法将这些文件夹条目相互嵌套,对吗Asp.net mvc 5 Web Api 2中相同表的外键,asp.net-mvc-5,foreign-keys,entity-framework-6,asp.net-web-api2,Asp.net Mvc 5,Foreign Keys,Entity Framework 6,Asp.net Web Api2,我有一个数据模型,它有一个通过数据定义的文件夹结构。不同的对象可以位于这些文件夹中,包括文件夹本身,这与资源管理器中的文件夹级联方式类似,并且可以相互包含 我想我已经弄清楚了外键在这个堆栈中是如何工作的,但是当我将它迁移到数据库时,系统不会允许我这样做。有什么问题吗?一定有办法将这些文件夹条目相互嵌套,对吗 namespace api.Models { public class Folder { public int Id { get; set; }
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; }
}
}
这里的疏忽是自引用外键不能为空。设想一个文件结构,其中每个文件夹都需要一个超级文件夹。它要么永远上升,要么两个文件夹必须相互引用,然后循环 这与员工拥有经理的典型自引用关键示例相同,其中经理也在员工表中。在你到达公司的领导层之前,你只能走得更远 系统假定外键不可为空,因此它使它们成为必需的,而不需要[required]属性。有时将外键设置为可选是有效的,为此,您可以将int转换为可为null的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; }
}
}