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。显然,当两个实体存储在同一个表中时,这是不可能做到的。