0

組織の Member テーブルがあり、一部のメンバーは他のメンバーの子です。親の詳細がプルアップされたときに、父または母とその子供または子供を関連付けたい。私はこの考えを持っていましたが、うまくいかないようです

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ていて、エンティティにナビゲーション プロパティが設定さMemberれてIsParentいる場合 (Trey Gramann が指摘したように重複の 1 つを削除します)、目的の値にアクセスできるはずです (例:コントローラーで)次のように:

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の両方のナビゲーション プロパティを使用してエンティティを設定している場合は、次のようなものを使用して、通常のオブジェクト ドット表記を使用してとエンティティを取得できるはずです (ここでは、タイプが であると想定していますが、この設定は異なります):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 のナビゲーション プロパティを設定し、最初に示した方法でそれらにアクセスする方がよいと思います。

これで問題が解決すると思うので、このチュートリアルを読むことを強くお勧めしますか? -framework-data-model-for-an-asp-net-mvc-application .

これはエンティティ POCO ではなく、IsParent単なる に名前を変更するParentことをお勧めします。IsParentBoolean

Parent最後のコメントとして、実際に/IsParentエンティティを持つ理由はありますか? エンティティを適切なナビゲーション プロパティでセットアップしたらMember、それを直接使用できるようです。そうしないと、不必要にラッパーを追加して混乱を招くだけです。

于 2013-01-07T10:30:04.237 に答える