C# 父亲和孩子一对多的关系
我有一个组织的成员表,有些成员是其他成员的子女。我想在父母的详细信息公布后,将父亲或母亲与他们的孩子联系起来。我有这个想法,但似乎行不通C# 父亲和孩子一对多的关系,c#,entity-framework,C#,Entity Framework,我有一个组织的成员表,有些成员是其他成员的子女。我想在父母的详细信息公布后,将父亲或母亲与他们的孩子联系起来。我有这个想法,但似乎行不通 public class IsParent { [Key] public int PId { get; set; } [DisplayName("Parent")] public int MId { get; set; } public virtual Member Member { get; set; }
public class IsParent
{
[Key]
public int PId { get; set; }
[DisplayName("Parent")]
public int MId { get; set; }
public virtual Member Member { get; set; }
[DisplayName("Child")]
public int MId { get; set; }
public virtual Member Member { get; set; }
}
非常感谢您的帮助。如果子id和父id存储在
成员
实体中,并且您在IsParent
实体中为成员
设置了导航属性(删除Trey Gramann指出的其中一个重复项),您应该能够访问所需的值(例如,在控制器中)如下所示:
这可能是您需要做的全部。但是,出于某种原因,您可能希望能够从成员导航属性访问这些属性-如果是,请继续阅读
如果您已经为成员
实体设置了子实体
和父实体
的导航属性,您应该能够使用以下类似的方法,使用常规对象点符号获取子实体
和父实体
(这里我假设他们属于人
,但您可能会有不同的设置):
如果要针对IsParent
实体缓存这些,可以尝试以下操作:
public class IsParent
{
[Key]
public int PId { get; set; }
[DisplayName("ParentID")]
public int ParentID {
get {
return Member.ParentID;
};
set {
Member.ParentID = value;
};
}
[DisplayName("ChildID")]
public int ChildID {
get {
return Member.ChildID;
};
set {
Member.ChildID = value;
};
}
public virtual Member Member { get; set; }
}
如果希望直接从IsParent
访问子实体和父实体,可以使用类似的方法:
[DisplayName("Parent")]
public Person Parent {
get {
return Member.Parent;
};
set {
Member.Parent = value;
};
}
[DisplayName("Child")]
public Person Child {
get {
return Member.Child;
};
set {
Member.Child = value;
};
}
我对这种方法有些担心——我不能保证设置方法能够可靠地工作(尽管我过去使用过这种方法,但我认为这取决于您如何设置存储库,可能会导致意外行为)。我还认为您最好只设置成员实体上的子级和父级的导航属性,然后按照我向您展示的第一种方式访问它们
我强烈建议你阅读本教程,因为我认为这将为你澄清问题
我还建议您将IsParent
重命名为Parent
,因为IsParent
意味着这是一个Boolean
而不是一个实体POCO
最后一点,是否有理由让父实体
/IsParent
实体?似乎一旦你用适当的导航属性设置了成员
实体,你就可以直接使用它了,否则你就不必要地添加一个包装器,这只会增加你的困惑 你的意思是要有重复的属性名吗?我想做的是从成员表中获取一个父Id和一个子Id。我可能做得不对,但想法是能够将父Id与其子Id关联,这些子Id都在一个公共成员表中。想法是能够将父Id与其子Id关联,这些子Id都是我的n普通成员表。看起来您正在尝试设置(或正在设置)导航属性。请参阅本教程-。一旦您设置了导航属性(例如,针对孩子),您就可以访问它的主键(id)以及存储在其中的所有其他数据。请参阅下面我的答案。感谢您的精心指导。没问题-如果您需要更多代码示例或其他任何信息,请告诉我。
public class IsParent
{
[Key]
public int PId { get; set; }
[DisplayName("ParentID")]
public int ParentID {
get {
return Member.ParentID;
};
set {
Member.ParentID = value;
};
}
[DisplayName("ChildID")]
public int ChildID {
get {
return Member.ChildID;
};
set {
Member.ChildID = value;
};
}
public virtual Member Member { get; set; }
}
[DisplayName("Parent")]
public Person Parent {
get {
return Member.Parent;
};
set {
Member.Parent = value;
};
}
[DisplayName("Child")]
public Person Child {
get {
return Member.Child;
};
set {
Member.Child = value;
};
}