我正在针对现有数据库进行EF Code First开发 . 由于我被传递了一个模式并且一些表名称不理想,我想以不同于基础表的方式命名某些实体类,并在OnModelCreating中执行映射 .
如果实体类名称与现有表名冲突,即使我在代码中重新映射它们,这似乎也不起作用 .
鉴于这些(由此示例构成)实体类:
-
小工具
-
小工具
我试图在OnModelCreating中执行以下映射:
modelBuilder.Entity<Gadget>.ToTable("Sprocket");
modelBuilder.Entity<Widget>.ToTable("Gadget");
在运行时,这会产生以下错误:
System.InvalidOperationException:实体类型'Widget'和'Gadget'不能共享表'Gadget',因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,它们之间具有匹配的主键 .
这没有意义,因为我正在将Gadget实体映射远离Gadget表,但是即使我明确指定它,它也会自动发生一些映射 .
这种行为有什么解释,可以解决吗?
3 回答
您的实体和表名是否单数?
我问的原因是,如果你想尝试做类似的事情
它可能不起作用,因为EF:CF按惯例将实体映射到其复数表 . 如果您想删除此约定,只需删除PluralizingTableNameConvention .
仅供参考:上面提到的EF WorkItem 1641已修复version 6.1.2
当 table 在不同的 schema 中具有相同的名称时,看起来就是这种情况 . 直到当前日期,在这方面都没有EF的支持 . 例如 . :
请检查https://entityframework.codeplex.com/workitem/1641并投票以增加此修复程序的重要性 .