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

任何帮助将不胜感激。

4

1 回答 1

0

如果子 ID 和父 ID 存储在实体中,并且您在实体中Member设置了导航属性(删除 Trey Gramann 指出的重复项之一),您应该能够访问您所追求的值(例如在你的控制器中)像这样:MemberIsParent

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但是,出于某种原因,您可能希望能够从导航属性访问这些属性- 如果是这样,请继续阅读。

如果你已经为你的实体设置了andMember的导航属性,你应该能够使用类似下面的东西来使用常规对象点表示法获取and实体(这里我假设它们是 type ,但你可能有这设置不同):ChildParentChildParentPerson

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

我对这种方法有些担心 - 我不能保证设置方法会可靠地工作(尽管我过去曾使用过这种方法,但我认为这取决于您如何设置存储库,可能会导致意外行为) . 我还认为您最好只在 Member 实体上设置 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为 just吗Parent,因为IsParent这意味着这是一个BooleanPOCO 而不是实体 POCO。

作为最后的评论,是否有理由实际拥有Parent/IsParent实体?似乎一旦您为Member实体设置了适当的导航属性,您就可以直接使用它 - 否则您会不必要地添加一个包装器,这只会增加您的混乱。

于 2013-01-07T10:30:04.237 回答