2013-01-06 201 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

沒問題 - 如果您需要更多代碼示例或任何其他信息,請告知我們。 –