我正在将项目从.net 4上运行的 Entity Framework 4.3 迁移到.net 4.5上运行的 Entity Framework 5 。在不进行任何更改的情况下,当我尝试运行项目时,代码优先模型配置失败,并带有 System.Data.MappingException ,并显示以下消息:
(495,10):错误3034:从第495,536行开始映射片段时出现问题:具有不同键的两个实体映射到同一行。确保这两个映射片段不会将具有不同键的两组实体映射到同一组行。
[删除其他5个类似段落]
该消息未指定导致问题的实体或关系,并且我的模型相当复杂。有什么方法可以让我更容易获得一些有用的信息,以便更容易诊断问题吗?
答案 0 :(得分:4)
Ladislav提出继承问题是正确的。看起来Entity Framework 4.3和Entity Framework 5在代码优先的Table Per Hierarchy配置方面的表现略有不同。
在这种情况下,我有四个派生类型,每个派生类型都有自己的EntityTypeConfiguration<T>
派生类。基类抽象类型没有向模型构建器注册的配置。这不是EF 4.3下的一个问题,它只是创建了一个以基本类型命名的表,并带有'Discriminator'列来区分类型。
要使用EF 5获得相同的行为,必须创建一个空配置类
public class MyBaseConfiguration : EntityTypeConfiguration<MyBase>
{
// Nothing happening here
}
然后将其注册到模型构建器
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new MyBaseConfiguration());
// Add configurations for derived and other types as normal
}
}