2011-11-15 14 views
0

私はAddressという名前のテーブルを持つレガシーデータベースを持っています。今では2つの他のテーブルにアドレス情報が割り当てられています。元のテーブルを特定するには、SourceIDフィールドがあります。 SourceIDが1の場合は最初のテーブルに関連付けられ、2の場合は2番目のテーブルのアドレス情報になります。エンティティフレームワークの条件付きマッピング

このレガシーデータベースには、データベースに定義されている外部キー制約はなく、追加することもできません。

この関連付けを持つモデルを作成するためにEntity Frameworkを使用しているのだろうかと思います。テーブル1は、情報をアドレス指定する(SourceID = 1という条件で)第2のテーブルと同じナビゲーションを有するエンティティを有することができる。

私は条件付きマッピングを作成しようとしましたが、 "When When SourceID = 1"を設定しました。また、列マッピングが1回しかマップできないため、マッピングを削除しました。

エラー3004:行683から始まるマッピングフラグメントの問題:アドレスのプロパティAddress.SourceIDに指定されていないマッピングがありません。エンティティがタイプ[Model.Address]の場合、キー付きエンティティ(PK)はラウンドトリップしません。

ありがとうございました!

答えて

4

条件付きマッピングを使用しないでください。 SourceIDプロパティのないエンティティにあなたのアドレスをマッピングし、アドレスエンティティから2つの派生エンティティを作成します。 SourceIDをディスクリミネータとして使用する(TPH継承 - 条件付きマッピングと同じですが、ディスクリミネータ値が異なる複数のエンティティがあります)。最初のエンティティと第2のエンティティを関連付けて、アドレスサブエンティティを修正します。

+1

これをさらに進めたい場合はどうすればいいですか?タイプIDを定義する第2の条件がテーブルにある場合はどうなりますか? TypeId = 2という新しい条件を継承してみました。SQLプロファイラを見ると、作成するSQLに両方の条件が保持されるわけではありません。マルチレベルのTPHを使用する方法はありますか? –