sql >> データベース >  >> RDS >> Sqlserver

Entity Framework 4 階層ごとのテーブル - 子のナビゲーション プロパティを定義する方法は?

    それでいくつかの問題は解決しましたが、壁にぶち当たりました。

    まず、データベース側で自己参照 FK を作成するときに、「データベースからモデルを更新」しようとすると、Entity Framework はこれらのナビゲーション プロパティをメインの基本型に追加します。これは、TPH の明示的な意味がないためです。モデル側でこれを行う必要があります。

    ただし、ナビゲーション プロパティを子タイプに手動で追加することはできます。

    このエラーを WRT:

    これは、"ZipCode_State" 関係と "City_State" 関係に使用しようとしていた "Location_State" という FK があったためです - これは機能しません (理由はまだわかりません)。

    それを解決するために、追加の列と追加の FK を追加する必要がありました - 1 つは "ZipCode_State" と呼ばれ、もう 1 つは "City_State" と呼ばれます - 明らかに、nav と物理的な FK の間で 1-1 でなければなりません。

    それが私の識別フィールドです。データベース側では、null 不可です .

    この問題に関するスレッドを読んだところ、リレーションシップを 0..* から 1..* に変更する必要があるとのことでしたが、私のリレーションシップはすでに 1..* でした。

    上記の「場所」の実際のデータベース テーブルを見ると、すべての FK が null 可能です (そうである必要があります)。したがって、私は自分の関係を 0..* にするべきかどうか疑問に思い始めました.

    ただし、TPH のため、それらは null 可能です。すべての「場所」に「状態」があるわけではありません。しかし、その場所が「都市」である場合、「州」が必要です。

    私の気持ちは、この SO の質問によってさらに慰められました:in-tph">ADO EF - TPH の派生型間の関連付けのマッピング エラー

    私は実際にその回避策を試していましたが(遭遇する前に)、回避策はうまくいきません。すべての関係を 1..* から 0..* に変更してみましたが、それでもうまくいきません。

    ここで時間を無駄にしたので、TPT に戻りました。

    結局のところ、TPH を使用すると、非常に大きなテーブルがあり、冗長で null 可能な列がたくさんあります。 JOINに関しては、より効率的です。しかし、少なくとも TPT では、null 可能で自己参照する FK を持つ必要はありません。

    誰かがこの問題の解決策を持っている場合は、私に知らせてください。しかし、それまでは TPT を使い続けます。




    1. pl-sql プロシージャまたはカーソルを使用して上位 3 ランクを選択する

    2. SwifthttppostデータがMySQLデータベースに挿入されない

    3. テストフェーズの後に常に実行されるMavenフェーズはどれですか?

    4. SQLServer2017管理ツール