私は、次のような非常に単純なデータベーステーブルのセットを持っています。
Vehicle
Id
RegNo
Car
Id (FK of Vehicle.Id)
OtherStuff
Bike
Id (FK of Vehicle.Id)
MoreStuff
私のクラスモデルはあなたが期待する通りです:Vehicleは抽象クラスであり、次にCarとBikeはそのサブクラスです。
EF4.1コードファースト構成を次のようにセットアップしました。
class VehicleConfiguration : EntityTypeConfiguration<Vehicle> {
public VehicleConfiguration() {
ToTable("Vehicles");
Property(x => x.Id);
Property(x => x.RegNo);
HasKey(x => x.Id);
}
}
class CarConfiguration : EntityTypeConfiguration<Car> {
public CarConfiguration() {
ToTable("Cars");
Property(x => x.OtherStuff);
}
}
class BikeConfiguration : EntityTypeConfiguration<Bike> {
public BikeConfiguration() {
ToTable("Bikes");
Property(x => x.MoreStuff);
}
}
ただし、EFがモデル構成を構築しようとすると、多くの奇妙な例外が発生します。
現在、これを破棄しています:
System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid column name 'Discriminator'.
その列名はどこから取得していますか?それは私のコードやデータベース自体にはありません。制御を引き継ぐのは何らかの慣習に違いありません。タイプごとのテーブルを使用するようにEFに指示するにはどうすればよいですか?
Vehicleクラスから「abstract」キーワードを削除すると(これは、ラインのどこかで健全性テストとして実行しました)、次のような別の例外が発生します。
(35,10) : error 3032: Problem in mapping fragments starting at lines 30, 35:EntityTypes AcmeCorp.Car, AcmeCorp.Bike are being mapped to the same rows in table Vehicles. Mapping conditions can be used to distinguish the rows that these types are mapped to.
私は明らかにひどく間違ったことをしているのですが、何ですか?私はMSDNのドキュメントと私が見つけることができる他のすべてのTPT+EF4.1の記事に従いました!