0

マスターテーブルと詳細テーブルがあります。たとえば、マスター テーブルはObjectSet<'MasterObject>で、詳細テーブルはObjectSet<'DetailObject>です。したがって、それぞれMasterObjectに が含まれますEntityCollection<'DetailObject>。私が理解しているようにDetailObject、次を使用してデータベースから削除できます。

  1. EntityCollection<'DetailObject> ec = masterObject.DetailObjects; // ナビゲーション プロパティとして
  2. ec.Remove(deleting_detail_object);// delete_detail_object は削除され、削除対象としてマークされます。
  3. context.SaveChanges();// 例外があります

(ナビゲーション プロパティ)Remove()の後は. 正常です。ただし、次の例外を教えてください:deleting_detail_object.MasterObjectnullcontext.SaveChanges()

「操作に失敗しました: 1 つ以上の外部キー プロパティが null 値を許容しないため、リレーションシップを変更できませんでした。リレーションシップが変更されると、関連する外部キー プロパティが null 値に設定されます。外部キーは null 値をサポートしていません。新しい関係を定義する必要があります。外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。」

これは で削除できますがDetailObjectcontext.RemoveObject()で削除できEntityCollection<>ますか?

4

1 に答える 1

0

この問題は EntityCollection とは関係がないと思います。データベース スキーマに問題があると思います。マスター テーブルに null 許容ではない詳細への FK がある場合、データベース スキーマに違反するため、詳細テーブルの行を削除することはできません。

FK を null にできるように変更するか、データベース スキーマを再設計してください。

これがサポートする必要がある操作である場合は、マスター テーブルを参照する詳細テーブルに FK を設定する必要があります。したがって、詳細行を削除できます。

これで問題が解決しない場合は、データベース テーブルの作成方法を示すスクリプトを提供してください。

于 2013-05-07T12:36:55.077 に答える