我有一个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的帮助将非常感激!
答案 0 :(得分:1)
问题是你使用的是TPH(Table Per Hieararchy),这是EF用来实现继承增强的一种方式。使用TPH EF需要一个名为discriminator的列来将记录与层次结构的特定实体相关联。
在你的情况下,我认为你需要TPT(但这取决于你想要访问类的内容)。为此,只需使用ToTable
设置Class2表(或视图)的名称。否则,您可以添加Discriminator
列,但应该让EF处理它。