这个问题将围绕三个类进行解释:Account、和 be .
第一层继承(在Account和IndividualAccount之间)是用表(每种类型的方法)实现的。第二层继承(在IndividualAccount和医生之间)是用表实现的,每个层次结构方法。
Fluent API配置如下:
class AccountConfiguration : EntityTypeConfiguration<Account>
public AccountConfiguration()
{
HasKey(x => x.Id);
...
}
}
class IndividualAccountConfiguration : EntityTypeConfiguration<IndividualAccount>
{
public IndividualAccountConfiguration()
{
ToTable("IndividualAccounts");
...
}
}
class DoctorConfiguration : EntityTypeConfiguration<Doctor>
{
public DoctorConfiguration()
{
...
}
}我们期望这个配置有两个表:第一个表存储所有用户的Id和公共属性(例如用户名和密码),第二个表存储所有个人共有的属性(例如姓名和电话号码)。此外,第二表将有一个区分域,区分医生和其他类型的个人,我们可能在我们的领域。
当我试图用身份证来找医生时,问题就出现了。将抛出一个异常,声称许多列无效,其中最重要的一个是:
无效列名“判别器”。\r\n
令我惊讶的是,如果我将Table("IndividualAccounts")放在IndividualAccount类定义之上,问题就会得到解决。但是我已经在配置中设置了表名(Fluent API)。除了Fluent API之外,我为什么还要使用注释?
更新
在注释的存在下,医生的属性被放置在IndividualAccounts表中,这确实是我们所期望的。但是,如果删除注释,将创建一个新的迁移,尝试将这些字段移动到基表帐户!
发布于 2016-09-05 15:57:00
令我惊讶的是,如果我将表(“IndividualAccounts”)放在IndividualAccount类定义之上,那么问题就会得到解决。但是我已经在配置中设置了表名(Fluent API)。除了Fluent API之外,我为什么还要使用注释呢?
不,问题没有解决,问题现在是隐藏的。只要用SSM检查一下,IndividualAccounts表不包含鉴别列!
ToTable("IndividualAccounts");抛出UnsupportedHybridInheritanceMapping异常,只需启用所有异常即可:
更多信息:
Multiple inheritance with Entity Framework TPC
我修改了我的类,使我现在也可以看到鉴别器。
下次请把问题贴在课堂上。更多信息:How to create a Minimal, Complete, and Verifiable example
如果使用下面的行代码,这将禁用约定异常,但稍后会遇到另一种问题:
modelBuilder.Conventions.Remove<MappingInheritedPropertiesSupportConvention>();问题EF尝试创建TPC而不是TPT,我将与EF-团队取得联系,并给您一个反馈。
https://stackoverflow.com/questions/39330948
复制相似问题