4

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

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

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

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

4

1 回答 1

4

Ladislav 提出的继承问题是正确的。看起来 Entity Framework 4.3 和 Entity Framework 5 在代码优先的 Table Per Hierarchy 配置方面的行为略有不同。

在这种情况下,我有四个派生类型,每个类型都有自己的配置类派生自EntityTypeConfiguration<T>. 基本的抽象类型没有向模型构建器注册的配置。这在 EF 4.3 下不是问题,它只是创建了一个以基本类型命名的表,并带有一个“鉴别器”列来区分类型。

要获得与 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
    }
}
于 2012-08-21T14:36:23.480 回答