我有一个组织的成员表,有些成员是其他成员的子女。在父母的详细信息被提取时,我想将父亲或母亲与他们的孩子联系起来。我有这个想法,但似乎不起作用
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; }
}
非常感谢任何帮助。
答案 0 :(得分:0)
如果针对Member
实体存储了子ID和父ID,并且您在Member
实体中设置了IsParent
的导航属性(请删除其中一个重复项,如下所示) Trey Gramann),您应该能够访问您所追求的值(例如在您的控制器中),如下所示:
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
和Child
的导航属性设置Parent
实体,则应该能够使用以下内容获取Child
和Parent
实体使用常规对象点表示法(这里我假设它们属于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
实体,你可以直接使用它 - 否则你不必要地添加一个包装,这只会增加你的困惑。