1

私は次のクラスを持っています

public class ObjectA{
   private List<ObjectB> list;    
}

ObjectAObjectB1:N の関係にあります。

ObjectB インスタンスの一部を削除したいので、次を使用します。

 while (objectA.list.Any())
        objectA.list.Remove(objectA.list.First());
  • リストは関係テーブルのものです -

    List<ObjectAobjectB>
    

データベースでは、関係をnull可能な外部キーとして定義しました。それ以外の場合は取得します

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

Nullable 外部キーになっ
たので、SQL プロファイリングを実行すると、次のようになります。

exec sp_executesql N'update [Schem].[ClassB]
set [ClassAID] = null
where ([Id] = @0)
',N'@0 uniqueidentifier',@0='092CE959-370A-4785-AF4A-93A0E4952C59'

オブジェクトを削除する代わりに、リレーションに null を入力するだけです。
私は何を間違っていますか?

ありがとう。

4

2 に答える 2

4

objectA.list.Remove(objectA.list.First());実際のエンティティではなく、関係を削除しています。objectB をデータベースから削除する場合は、次のようにコンテキストから削除する必要があります。

foreach(var item in objectA.list.ToList())
    context.ObjectBs.Remove(item);
于 2013-01-19T01:10:00.060 に答える
-1

Cascade Deleteの場合だと思います。

よくわかりませんが、カスケード削除を(アプリケーションとデータベースで)設定して、EFがカスケードで削除できるようにできると思います。

たぶん、それを行う方法を見つけるためにいくつかのドキュメントを見てください。SOには関連する質問がたくさんあるようです。

于 2013-01-17T15:33:04.743 に答える