2012-10-03 7 views
8

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

enter image description here

SQL Server 2008での私のテーブルがあります:

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

私は、スクーター、車を区別するために弁別フィールド上の自分のEDMXに条件を追加しましたバイクとバイクの実体。

電動車両と車両は要約です。

しかし、私は、コンパイル時に、このエラーが表示されます:

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

編集:
ラディスラフへ:

エラー3034:
私はそれとエラーの変化が私のエンティティのすべてのためにそれになろうとマッピングフラグメントで問題がライン72から始まります、 86:エンティティは同じテーブル内の異なる行にマップされます。これらの2つのマッピングフラグメントが重複キーを持つ2つのエンティティのグループを2つの異なる行グループにマッピングしないようにしてください。

ヘンクへ(Ladislay提案して)​​: マッピングの詳細のすべてがあります
enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

何が悪いのでしょうか?

ありがとうございました

+0

マッピングの詳細を投稿できますか?主に弁別者に関する。 –

+0

抽象クラスの識別器の値を追加してみてください。 –

+0

ありがとうございますが、動作しません。私の記事を見て、私はそれを説明した。 MotorizedVehicleおよびVehicle抽象プ​​ロパティを削除すると、その情報が表示されます。しかし、私は要約が必要です。 – Cedric

答えて

1

EF4はこれらをうまく処理しません。あなたは弁別器でそれを行うことができますが、クラスは非抽象である必要があります。基本クラスがEntity Framework以外でインスタンス化されないようにするには、コード分析やテストなどの別のメソッドを使用する必要があります。

また、EF6にアップグレードすることもできます。モデルをより良くサポートするかどうかはわかりませんが、モデル階層をより適切に処理して、モデルをよりよくサポートするデータベーススキーマを改善できます。

関連する問題