0

次のデータベース スキーマがあるとします。

Table A: AId (PK)

Table B: BId (PK)

Table C: CId (PK)

Table AB: AId, BId (composite PK, FKs to A and B), Data

Table BC: BId, CId (composite PK, FKs to B and C), Data

Table ABC: AId, BId, CId, Data

データベースにABCは 2 つの FK があります。1 つはABonAIdBId、もう 1 つはBConBIdCIdです。

EF デザイナーを使用して、このデータベースからモデルを作成してみてください。

Include foreign key columns in the model チェックした場合、動作します。しかし、モデルに FK 列があるのはあまり良くありません。

Include foreign key columns in the model チェックを外した場合、FK の 1 つだけABCが正常にマッピングされます。何が問題だったのかを確認するには、xmlを表示する必要があります.edmx(Craig に感謝します!)、次のエラーが表示されます。

警告 6037: 外部キー制約 'FK_ABC_BC' がストレージ モデルから省略されています。テーブル「Model.Store.ABC」の列「BId」は、複数の関係に参加している外部キーです。データの不整合が発生する可能性があるため、1 対 1 のエンティティ モデルは検証されません。

SO で見つけることができるこの問題に関する他の唯一の言及を読みましたが、これは同じ問題ではないと思います。データベースの設計レベルでは何も問題はありません。当面はABandBCに代理キーを課すことでこれを回避しますが、本当に知りたいのは次のとおりです。

データベースに一致するモデルを作成した場合、ここで EF が心配しているデータの不整合は何ですか?

そして、すべてがうまくいくと説得するために私にできることはありますか?

4

1 に答える 1

1

私の意見では、このシナリオでは EF が巧妙すぎるため、2 つ目のエンティティとの関係が存在しないため、関連付けを 1 つだけ割り当ててエンティティを保存不可にするエンティティを使用できなくなります。

複数のアソシエーションが同じ外部キー列に基づいている場合、独立したアソシエーションの状態を追跡することで EF に内部的な問題が発生する可能性もありますが、それは単なる別の推測です。通常、EF フィーチャのマッピングに使用されるデータベース フィーチャは、複数の構造間で共有できません。私が今考えることができる唯一の例外は、主キーと独自の方法での識別子列です。

データベースでのこのタイプの関係はまったく好きではないことを述べたいと思います。

于 2011-09-28T11:28:04.037 に答える