Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 一对零或一关系,与自我_Entity Framework - Fatal编程技术网

Entity framework 一对零或一关系,与自我

Entity framework 一对零或一关系,与自我,entity-framework,Entity Framework,我拥有以下实体: public class Category { public int ID { get; set; } public int? ParentID { get; set; } public string Name{ get; set; } public virtual Category Parent { get; set; } } 我试图定义一个关系:一个类别可以有一个父类别。 我已经定义了主键: HasKey(m => m.ID); 我

我拥有以下实体:

public class Category
{
  public int ID { get; set; }    
  public int? ParentID { get; set; }
  public string Name{ get; set; }
  public virtual Category Parent { get; set; }
}  
我试图定义一个关系:一个类别可以有一个父类别。 我已经定义了主键:

HasKey(m => m.ID);  

我读过一个示例,其中包括一对零或一关系,但我无法准确理解HasRequired如何暗示实体在关系中是可选的。

我认为另一个问题是,您不能将完全相同的类作为EF中的父类引用到它自己,您可以使用投影,以便对同一类型具有不同的属性


child引用中的HasOptional与您引用的示例中的“我可能有一个父项,也可能没有父项”具有相同的效果。在您引用的示例中,child有一个ParentId,它既是主键又是外键。当父级和子级是不同的实体和不同的数据库表时,这是可以的,但当它们是自引用时则不行。类别必须具有主ID和外部ID。但是主键应该是唯一的,所以实际上没有空间让1:1的孩子共享同一个键


你能做什么?我认为唯一的选择是将关联映射为1:n,并强制执行n不能大于1的业务规则。请注意,这不是EF限制。没有任何关系数据库模型可以将自引用关联限制为1:1。

当然,父对象和子对象是不同的实体-ID是主键,ParentID是另一个实体ID的外键,但在示例中,它表示OfficeAssignment具有作为主键和外键的InstructorID属性。因此,它接受父级的PK,并将其复制为自己的PK,同时也是一个FK。显然,当两个实体存储在同一个表中时,这是不可能做到的。