次のデータベース スキーマがあるとします。
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 つはAB
onAId
とBId
、もう 1 つはBC
onBId
とCId
です。
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 で見つけることができるこの問題に関する他の唯一の言及を読みましたが、これは同じ問題ではないと思います。データベースの設計レベルでは何も問題はありません。当面はAB
andBC
に代理キーを課すことでこれを回避しますが、本当に知りたいのは次のとおりです。
データベースに一致するモデルを作成した場合、ここで EF が心配しているデータの不整合は何ですか?
そして、すべてがうまくいくと説得するために私にできることはありますか?