特定の数のアイテムに対して TPH を実装するレガシー システムを使用しています。したがって、現在の構造は次のようになります
Abstract Class 1 Abstract Class 2 Abstract Class 3
| | |
--------- --------- ---------
| | | | | | | | |
T1 T2 T3 T4 T5 T6 T7 T8 T9
したがって、タイプ (T*) はすべてのテーブルの識別子ですが、特定のタイプは共通の列を共有するため、かなりの数の異なるテーブルがあります。問題は、これらすべての項目が実際には小さな共通点を共有していることですが、これらの項目すべてをコレクションに集める方法がないことです。実際には、階層は実際にはこのように見えるはずです。
--------------- Base Abstract 1 ----------
| | |
Abstract Class 1 Abstract Class 2 Abstract Class 3
| | |
--------- --------- ---------
| | | | | | | | |
T1 T2 T3 T4 T5 T6 T7 T8 T9
したがって、本質的には、タイプごとの各テーブルが TPH である TPT です。実際の例として、必要なものは次のとおりです。
--------------- Vehicle ---------------
| | |
Car Boat Plane
| | |
--------- --------- ---------
| | | | | | | | |
BMW Toyota Fiat T4 T5 T6 T7 T8 T9
明らかに、初期設計にはいくつかの設計上の欠陥があり、3 つの異なるテーブルをクエリせずにすべての車両のリストを取得する必要があるとは誰も予想していませんでした。だから私の質問は、既存の構造で、この新しい階層をエンティティフレームワークに追加する方法があるということです。こんなことを考えていた
Vehicle
-------
VehicleId
TypeId (Boat, Plane, Car, etc)
ItemFK (BoatID, PlaneId, CarId)
これは可能ですか?これらをエンティティ フレームワークにマップする方法はありますか? それらを正しく一致させることはできません。BoatId、PlaneId、および CarId を VehicleId ( Entity Framework の条件付きマッピング - または TPH での操作など) に置き換えるとうまくいく可能性がありますが、その時点で、実際にはそうではない非常に侵襲的なスキーマ変更を行うことになります。オプションであり、それが機能するかどうかはわかりません。基本的に、既存のキーを新しい階層にマップする方法が必要です。どんな助けでも大歓迎です。私は途方に暮れていて、私の質問に答える解決策が見つからないようです。