8

EF4 と DB から作成された TPH モデルで継承を使用する必要があります。
シンプルなクラスをテストするための新しいプロジェクトを作成しました。私のクラスモデルがあります:

ここに画像の説明を入力

SQL SERVER 2008 に私のテーブルがあります:

VEHICLE 
  ID : int PK
  Owner : varchar(50)
  Consumption : float
  FirstCirculationDate : date
  Type : varchar(50)
  Discriminator : varchar(10)

Scooter、Car、Motorbike、および Bike エンティティを区別するために、Discriminator フィールドの EDMX に条件を追加しました。

MotorizedVehicle と Vehicle は Abstract です。

しかし、コンパイルすると、次のエラーが表示されます。

エラー 3032: 行 78、85 で始まるフラグメントのマッピングの問題:EntityTypes EF4InheritanceModel.Scooter、EF4InheritanceModel.Motorbike、EF4InheritanceModel.Car、EF4InheritanceModel.Bike がテーブル Vehicle の同じ行にマップされています。マッピング条件を使用して、これらのタイプがマップされる行を区別できます。

編集:
Ladislavへ:
私はそれを試して、私のすべてのエンティティでそれになるようにエラーを変更します:

エラー 3034: 行 72、86 から始まるフラグメントのマッピングの問題: エンティティが同じテーブル内の複数の行にマップされています。これらの 2 つのマッピング フラグメントが、重複するキーを持つエンティティの 2 つの > グループを、2 つの異なる行グループにマップしないようにしてください。

Henk へ (Ladislay の提案による):
すべてのマッピングの詳細があります。 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

どうしたの ?

ありがとう

4

1 に答える 1

1

EF4 はこれらをうまく処理しません。ディスクリミネーターを使用して実行できますが、クラスは非抽象である必要があります。コード分​​析やテストなどの別の方法を使用して、基本クラスが Entity Framework 以外によってインスタンス化されないようにする必要があります。

または、EF6 にアップグレードすることもできます。より適切にサポートされるかどうかはわかりませんが、モデル階層の処理が確実に改善され、モデルをより適切にサポートするより優れたデータベース スキーマが可能になります。

于 2015-01-09T04:06:35.660 に答える