我正在使用Entity Framework 6.0,其中包含Code First和Table per Hierarchy(TPH)继承。
请参阅以下MWE(我省略了其他流畅的api语句以澄清问题所在):
public abstract class Employee
{
public int EmployeeId { get; set; }
public string Type { get; set; }
}
public class CEO : Employee
{
public CEO() {Type = 1}
}
public class Other : Employee
{
}
public class InheritanceMappingContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>()
.Map<CEO>(m => m.Requires("Type").HasValue(1))
.Map<Other>(m => m.Requires("Type").HasValue(**<>1**));
}
}
我想将列1
(应该是鉴别器列)Type
的所有条目映射到类CEO
。条目1
的条目不同于Type
的所有条目都应映射到类Other
。
这里出现两个问题。第一个是如何将.HasValue(**<>1**));
写为正确的代码。第二件事是我想在我的代码中使用Type
列,但由于这是鉴别器列,我无法访问它。
答案 0 :(得分:2)
我不相信可能不使用逻辑进行映射,我很确定不可能将鉴别器列作为您班级中的属性来访问
另外,我认为从概念上讲存在一个问题,即OOP继承真的适用于这种情况吗?在OOP中,兄弟类不能在继承层次结构中侧向投射,只能向上和向下投射,例如苹果可以投射到水果上,但苹果不能投入橙色。在您的示例中,类型为&#34;其他&#34;的员工可能有一天(运气好的话)成为首席执行官。这是一个小问题,不太可能出现,可以直接修改SQL(丑陋),但它表明继承不是解决问题的正确方法。