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

EF4.1:0 か 1 対 0 か 1 (0..1 から 0..1) の関係を持つことは可能ですか?

    いいえ、それは不可能であり、SQL サーバーで動作するとは思えません。データベース関係では、一方の端が従属になる必要があります。これは、プリンシパル エンドのプライマリ キー (PK) を参照することを意味します。これを外部キー (FK) と呼びます。 1 対 1 の関係について話す場合、従属テーブルの 1 つのレコードのみがプリンシパル テーブルの特定のレコードを参照できるように、FK を一意としてマークする必要があります。この場合の唯一の有効な関係は 0..1 - 1 であり、プリンシパルは従属なしで存在できますが、従属は既存のプリンシパルに関連付けられている場合にのみ存在できます。これは、その FK 値をプリンシパルの PK 値に設定する必要があるためです。理論的には FK は null 可能ですが、データベースが一意の制約を実装する方法によって異なります。データベースが null を別の一意の値としてカウントする場合、1 つの依存レコードのみが FK を null に設定できます (これは SQL サーバーの場合だと思います)。

    EF では、EF が一意の制約をサポートしていないため、これはさらに複雑です。そのため、依存エンティティの FK がその PK でもある場合にのみ 1 対 1 の関係を構築できます (=null に設定する方法はありません)。 FK を null に設定できない場合、null 可能にすることはできません。そのため、プリンシパル エンティティが存在する必要があります。そうしないと、参照整合性によってエラーがスローされます。

    あなたにとって最善の解決策は Request を検討することです プリンシパル エンティティと Result として 依存として。最初にリクエストを作成し、Result が続く限りデータベースに保持する必要があります。 . Result 対応する Request と同じ PK 値を持つ必要があります (列は自動インクリメントできません)。 (そして PK は Request への FK でなければなりません ).



    1. 連鎖結合が期待どおりにフィルタリングされない

    2. Robolectricアクセスデータベースはエラーをスローします

    3. スキーマパターン検索からデータクラスへの関連付け

    4. コマンド ライン ユーティリティを使用して SQL Server 2008 にログインできない