3

まず、私のエラーから始めましょう:

「XとYの間の関係を削除しようとしました。ただし、関係の外部キーの1つをnullに設定することはできません。」

今私がやろうとしていることの説明のために...

私は次のデータベーステーブルを持っています:標本、男性、女性、標本関係。男性は常に標本であり、女性は常に標本です。したがって、標本には2つの1対多の関係があります(ただし、ロジックにより、標本に両方が設定されることはありません)。また、男性は1対多のガールフレンドを持つことができ、同様に女性は1対多のボーイフレンドを持つことができます(ねえ、これは結局21世紀です)。これは、多対多のテーブル(SpecimenRelationship)を作成することで解決されました。

SQLの関係は、標本の削除が男性と女性の両方にカスケードされるように設定されています。その後、必要な機能は、男性/女性を削除してSpecimenRelationshipにカスケードすることですが、SQLの制約(複数のサイクルパスのゴミ!)のため、これは実行されません。したがって、一方はカスケードし、もう一方はSetNullです(男性がSetNullであるとしましょう)。

さて、すべてがうまくいかない部分についてです。男性エンティティからSpecimenRelationshipを削除すると、上記のエラーが発生します。しかし、なぜこれが起こるのでしょうか?男性エンティティを削除している場所がわかりません。Linq-to-Sqlがどのように機能するかを理解していません。なぜこれはSpecimenRelationshipエントリの単なる削除ではないのですか?

次にいくつかのサンプルコードを示します。

Male male = GetMaleFromDataContext();

SpecimenRelationship relationshipToRemove = male.SpecimenRelationships.Single(x => x.FemaleID == someFemaleID);

male.SpecimenRelationships.Remove(relationshipToRemove);

DB.SubmitChanges();//error thrown here

なぜ関係カスケードがここで機能するのですか?

4

1 に答える 1

0

テーブルにリレーションシップを作成すると、外部キー列の NULL 制約が自動的に NOT NULL に設定されます。

NULL に設定する必要があり、カスケード ルールが機能します (と思います)。

デザイン モード (Management Studio) でのプロパティ名は、Allow Nulls です。

于 2012-10-01T19:39:54.523 に答える