一对一或零关系,与自我

时间:2013-02-03 14:18:24

标签: 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; }
}  

我正在尝试定义一个关系:Category可以选择具有父类别 我已经定义了主键:

HasKey(m => m.ID);  

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

2 个答案:

答案 0 :(得分:0)

我认为另一个问题是你不能将自己完全相同的类引用为EF中的父类,你可以使用的是Projection,以便为同一类型提供不同的属性。

子引用中的HasOptional与我可能拥有父代的具有相同的效果

答案 1 :(得分:0)

在您引用的示例中,子项具有ParentId,它既是主键,也是外键。当父和子是不同的实体(和不同的数据库表)时,这是可以的,但是当它们是自引用时则不行。 Category必须拥有主要和外国的ID。但是主键应该是唯一的,所以对于应该共享相同键的1:1孩子来说,实际上没有空间。

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