私は既存のデータベースに対してEFコードファースト開発を行っています。私はスキーマが渡され、テーブル名のいくつかは理想的ではないので、OnModelCreatingでマッピングを実行すると、特定のエンティティクラスの名前を基になるテーブルと異なるようにしたいと思います。エンティティをテーブルにマップできません。別のエンティティがテーブルと同じ名前を持っている場合
エンティティクラス名が既存のテーブル名と競合する場合、コードで再マップしても、これは機能していないようです。私はOnModelCreatingで、次のマッピングを実行しようとしています
- ウィジェット
- ガジェット
:
modelBuilder.Entity<Gadget>.ToTable("Sprocket");
modelBuilder.Entity<Widget>.ToTable("Gadget");
は、これらの(この例で構成された)エンティティクラスを考えます
実行時に、次のエラーが発生します。
System.InvalidOperationException : The entity types 'Widget' and 'Gadget' cannot share table 'Gadget' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them.
私はガジェットテーブルからガジェットエンティティをマッピングしているので意味がありませんが、明示的に指定していても自動的にマッピングが行われているようです。
この動作の説明は何ですか?回避できますか?
おかげ上に固定されていますが、私はすでに場所でコードの行を持っていました。気まぐれに、私はそれを取り除こうとしましたが、結果は同じでした。 –
エンティティ名を制御できる場合は、テーブル名に名前を付けないでください。 – OpticalDelusion
あなたは良い点を挙げます。私はそれをすることができましたが、今のところ、なぜそれがうまくいかないかを知りたいと思っています。 –