4

.net 4 で実行されているEntity Framework 4.3から.net 4.5 で実行されているEntity Framework 5にプロジェクトを移行中です。変更を加えずにプロジェクトを実行しようとすると、コード ファースト モデルの構成がSystem.Data.MappingExceptionで失敗し、次のメッセージが表示されます。

(495,10) : エラー 3034: 行 495、536 で始まるフラグメントのマッピングの問題: 異なるキーを持つ 2 つのエンティティが同じ行にマップされています。これらの 2 つのマッピング フラグメントが、異なるキーを持つエンティティの 2 つのグループを同じ行のグループにマップしないようにしてください。

[他の同様の段落を 5 つ削除]

メッセージには、問題の原因となっているエンティティまたは関係が特定されておらず、モデルがかなり複雑です。問題の診断を容易にするために、さらに役立つ情報を入手する方法はありますか?

4

1 に答える 1

4

継承の問題を示唆する Ladislav は正しかった。Entity Framework 4.3 と Entity Framework 5 は、コード ファーストの Table Per Hierarchy 構成に関しては、動作が少し異なるようです。

この場合、4 つの派生型があり、それぞれが から派生した独自の構成クラスを持ちますEntityTypeConfiguration<T>。基本の抽象型には、モデル ビルダーに登録された構成がありませんでした。これは EF 4.3 では問題ではありませんでした。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
    }
}
于 2012-08-21T14:36:23.480 に答える