实体核心与继承的关系

时间:2018-03-08 22:54:38

标签: entity-framework-core

我有以下基类(我省略了构造函数)

public class ClassA
{
    public int ClassAId {get;set;}
}

从中派生多个类。其中,有两个类可以容纳ClassB列表

    public class ClassA1:ClassA
    {
        public virtual List<ClassB> ClassBList {get;set;}
    }

    public class ClassA2:ClassA
    {
       public virtual List<ClassB> ClassBList {get;set;}
    }
    public class B
    {
       public int ClassBId{get;set;}
       public int ClassAId {get;set;}
       public ClassA ClassA {get;set;
    }

请注意,虽然看起来我不需要将ClassA1和ClassA2分开,但是为了简单起见,还有很多其他的事情我会选择省略。

我现在无法配置实体模型。如果我只有一个持有ClassB列表的ClassA,我会做

modelBuilder.Entity<ClassA>(entity =>
{
    entity.HasKey(e => e.ClassAId);

    entity.HasMany(a => a.ClassBList)
    .WithOne(b => b.ClassA)
    .HasForeignKey(d => d.ClassAId)
    .OnDelete(DeleteBehavior.Cascade)
}

modelBuilder.Entity<ClassB>(entity =>
{
    entity.HasKey(e => e.ClassBId);
}

但我无法得到类似于我希望ClassA1和ClassA2链接到ClassB的情况。我尝试使用HasMany / HasOne对ClassA1和ClassA2使用类似的东西(仅显示ClassA1,我对ClassA2也这样做)

modelBuilder.Entity<ClassA1>(entity =>
{
    entity.HasMany(a => a.ClassBList)
    .WithOne(b => (ClassA1)b.ClassA)
    .HasForeignKey(d => d.ClassAId)
    .OnDelete(DeleteBehavior.Cascade)
}

它创建了数据库,但在我尝试将ClassB实际添加到ClassA1或ClassA2时抛出了一个转换错误。我正在使用Entity Core 2.0。

0 个答案:

没有答案