2013-01-06 58 views
0

我有一个组织的会员表,有些会员是其他一些会员的子女。当父母的细节被拉高时,我想将父亲或母亲与他们的孩子或孩子联系起来。我有这个想法,但它似乎不会工作父亲和子女之间的一对多关系

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

任何帮助将非常感激。

+2

你的意思是有重复的属性名称? –

+0

我想要做的是从成员表中获取一个父Id和一个子Id。我可能做错了,但想法是能够将父母与他们的孩子联系在一起,这些孩子都在共同成员表中 – Diin

+0

_想法是能够将父母与他们的孩子联系在一起, 。它看起来像是试图设置(或者已经在设置)导航属性。看看这个教程 - http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp -net-MVC应用程序。一旦你完成了导航属性的设置(例如对于孩子),你将能够访问它的主键(id)和存储在其中的所有其他数据。请参阅下面的答案。 –

回答

0

如果孩子和家长ID存储对Member实体,你有你的IsParent实体(除去通过三分球GRAMANN指出副本之一)Member的导航属性设置,您应该能够访问你以后的值(例如在你的控制器中)如下所示:

int childID = IsParent.Member.ParentID; 
//Assuming your ParentID in the member entity is called `ParentID` 

int parentID = IsParent.Member.ChildID; 
//Assuming your ParentID in the member entity is called `ChildID` 

这可能是你所需要做的。但是,由于某种原因,您可能希望能够从Member导航属性中访问这些属性 - 如果是这样,请继续阅读。

如果已设置与导航性能的Member实体组成了两种ChildParent,你应该能够使用类似下面的使用规则对象点符号,以获得ChildParent实体(在这里我假设他们是类型Person的,但你可能有这样的设置不同):

Person child = IsParent.Member.Child; 
Person parent = IsParent.Member.Parent; 

如果你想缓存这些对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; 
      }; 
    } 

我有这种做法有些担忧 - 我不能保证设置方法将可靠地工作(尽管过去我使用过这种方法,但我认为这取决于您如何设置存储库,可能会导致意外的行为)。我也认为只需在成员实体上设置Child和Parent的导航属性,然后按照我向您展示的第一种方式访问​​它们,会更好。

我能否强烈建议您阅读本教程,因为我认为这会为您解决问题 - http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

可我也建议你重命名IsParent只是Parent,为IsParent意味着这是一个Boolean而非实体POCO。

作为最终评论,是否有理由确实拥有Parent/IsParent实体?看起来好像一旦你的Member实体设置了适当的导航属性,你可以直接使用它 - 否则你会不必要地添加一个包装,这会增加你的困惑。

+0

感谢您的精心指导 – Diin

+0

没问题 - 如果您需要更多代码示例或任何其他信息,请告知我们。 –