我正在使用EF Code First对现有数据库进行开发。由于我手头上有一个模式,其中一些表名不太理想,因此我想将某些实体类的名称命名为与底层表不同,并在OnModelCreating中执行映射。
如果实体类名与现有表名冲突,即使我在代码中重新映射它们,也似乎无法正常工作。
给定以下(为此示例而虚构的)实体类:
小部件
小玩意儿
我试图在OnModelCreating中执行以下映射:
在运行时,会产生以下错误:
System.InvalidOperationException:由于实体类型“Widget”和“Gadget”不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系来匹配它们的主键,因此它们不能共享表“Gadget”。
这是不合理的,因为我正在将Gadget实体映射到Gadget表,但似乎某些映射是自动发生的,即使我明确指定了它。
这种行为的解释是什么,如何解决?
如果实体类名与现有表名冲突,即使我在代码中重新映射它们,也似乎无法正常工作。
给定以下(为此示例而虚构的)实体类:
小部件
小玩意儿
我试图在OnModelCreating中执行以下映射:
modelBuilder.Entity<Gadget>.ToTable("Sprocket");
modelBuilder.Entity<Widget>.ToTable("Gadget");
在运行时,会产生以下错误:
System.InvalidOperationException:由于实体类型“Widget”和“Gadget”不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系来匹配它们的主键,因此它们不能共享表“Gadget”。
这是不合理的,因为我正在将Gadget实体映射到Gadget表,但似乎某些映射是自动发生的,即使我明确指定了它。
这种行为的解释是什么,如何解决?