如何将数据从DB表中放入具有EF继承类的实体?

时间:2017-07-07 19:29:38

标签: c# entity-framework entity-framework-6

我有一个SQL视图,我正在使用实体框架。该视图表示两个连接在一起的现有对象。我认为最好的方法是让对象继承另一个对象。

我收到此错误:

  

System.Data.Entity.Core.EntityCommandExecutionException:错误   执行命令定义时发生。看到内心   细节例外。 ---> System.Data.SqlClient.SqlException:   列名称无效' Discriminator'。

以下是我的设置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Class1>()
     .ToTable("mySQLView", "TEST")
     .HasKey(r => new { r.Property1 });

    modelBuilder.Entity<Class1>().Property(r => r.Property1).HasColumnName("Key1");
    modelBuilder.Entity<Class1>().Property(r => r.Property2).HasColumnName("Column2");

    modelBuilder.Entity<Class1>().Property(r => r.Property3).HasColumnName("Column3");
    modelBuilder.Entity<Class1>().Property(r => r.Property4).HasColumnName("Column4");
}

以下是我的两个课程:

public class Class1 : Class2
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

public class Class2
{
    public string Property3 { get; set; }
    public string Property4 { get; set; }
}

Class2正由单独的DB调用使用。 Class1仅用于其中一个调用。任何有关如何构建我的类或正确设置EF的帮助将非常感激!

1 个答案:

答案 0 :(得分:1)

问题是你使用的是TPH(Table Per Hieararchy),这是EF用来实现继承增强的一种方式。使用TPH EF需要一个名为discriminator的列来将记录与层次结构的特定实体相关联。

在你的情况下,我认为你需要TPT(但这取决于你想要访问类的内容)。为此,只需使用ToTable设置Class2表(或视图)的名称。否则,您可以添加Discriminator列,但应该让EF处理它。