如何从放入具有 EF 继承类的实体的数据库表中获取数据?



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

我收到此错误:

System.Data.Entity.Core.EntityCommandExecutionException: a error 在执行命令定义时发生。查看内部 详细信息的例外情况。---> System.Data.SqlClient.SqlException: 列名称"鉴别器"无效。

这是我的设置:

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; }
}

类 2 正由单独的数据库调用使用。类 1 仅在其中一个调用中使用。有关如何正确构建我的类或设置 EF 的任何帮助将不胜感激!

问题是您正在使用 TPH(每个层次结构的表(,这是 EF 用于实现继承的一种方式。使用 TPH EF 需要一个名为鉴别器的列,以将记录与层次结构的特定实体相关联。

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

最新更新