0

こんにちは、抽象基底クラスとその実装の間の親子関係で問題が発生しました

public class SuperParent
{
    public ICollection<Parent> ParentList { get; set; }
}

public abstract class Parent
{
    public int Id { get; set; }
    public string Title { get; set; }
}

public abstract class ParentExtended : Parent
{
    public ICollection<ChildClass> ChildClassList { get; set; }
}

public class RealClass : ParentExtended
{

}

public class ChildClass
{
    public int Id { get; set; }
    public Parent Parent { get; set; }
}

DBContext は次のようになります。

    public DbSet<SuperParent> SuperParents { get; set; }
    public DbSet<Parent> Parents { get; set; }
    public DbSet<ChildClass> ChildClasses { get; set; }

サンプルコード

    SuperParent sp = new SuperParent();
    sp.ParentList = new List<Parent>();


    RealClass parent = new RealClass();
    parent.ChildClassList = new List<ChildClass>();
    parent.ChildClassList.Add(new ChildClass());

    sp.ParentList.Add(parent);

列を持つデータベース テーブル ChildClass の結果

  • ID
  • 親 ID (FK)
  • ParentExtendedId(FK)

ここで、ParentId は常に null であり、parentExtendedId には正しい ID が入力されていますが、不要です。

私の質問はこれが進むべき道であり、どうすればchildclass ParentをParentExtendedではなく親として与えることができますか

4

1 に答える 1

1

私は自分で答えを見つけましたが、それはかなり簡単です:)抽象クラスParentExtendedの子リストを、子内の逆プロパティが何であるかをクラスに伝えるデータ注釈で装飾します。

だから私の例では:

public abstract class ParentExtended : Parent  
{  
   [InverseProperty("Parent")]    
   public ICollection<ChildClass> ChildClassList { get; set; }  
}

With は Realclass に戻るポインタを作成しますが、Parent という名前の変数に

于 2011-02-23T20:24:50.167 に答える