实体框架代码中的基类和父/子关系

时间:2011-02-22 21:54:38

标签: c# architecture ef4-code-only

您好我遇到了抽象基类与其实现之间的父/子关系问题

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
  • Parentid(FK)
  • ParentExtendedId(FK)

其中ParentId始终为null,parentExtendedId填充了正确的Id但不需要。

我的问题是这样的方法,我怎样才能将子类Parent作为父级而不是ParentExtended

1 个答案:

答案 0 :(得分:1)

我自己找到了答案,这很容易:) 使用数据注释在抽象类ParentExtended中装饰子列表,该数据注释告诉类子内的反向属性是什么。

所以在我的例子中:

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

创建一个指向Realclass的指针,但是在名为Parent

的变量中