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;
           };
    }