实体框架4.3到实体框架5映射异常

时间:2012-08-20 09:26:56

标签: entity-framework entity-framework-5

我正在将项目从.net 4上运行的 Entity Framework 4.3 迁移到.net 4.5上运行的 Entity Framework 5 。在不进行任何更改的情况下,当我尝试运行项目时,代码优先模型配置失败,并带有 System.Data.MappingException ,并显示以下消息:

  

(495,10):错误3034:从第495,536行开始映射片段时出现问题:具有不同键的两个实体映射到同一行。确保这两个映射片段不会将具有不同键的两组实体映射到同一组行。

     

[删除其他5个类似段落]

该消息未指定导致问题的实体或关系,并且我的模型相当复杂。有什么方法可以让我更容易获得一些有用的信息,以便更容易诊断问题吗?

1 个答案:

答案 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
    }
}