0

オブジェクトを削除するコードのスニペットを次に示します。

var foo = this.repository.GetFoo();

foreach (var item in foo.RelatedItems.ToList()) {
    if (x == y) {
        //Update happens here; this isn't executing however.
    } else {
        //This code block is executed; this is where I am telling the context to mark this object for deletion.
        foo.RelatedItems.Remove(item);
    }
}

this.repository.Save();

.Save()呼び出されると、「列に値 NULL を挿入できません」というエラーが表示されます。プロファイラーを使用して、実際にどの SQL が実行されているかを確認しました。

update dbo.RelatedItems
set foreignKey = null
where id = X

ここで削除ステートメントが実行されることを期待しますが、何らかの理由で、外部キーを null に設定してレコードを更新しようとしています。

編集

この問題を解決するために、リポジトリ クラスに次のコードを追加しました。

public void DeleteItem(Item item) {
    context.Entry(item).State = System.Data.EntityState.Deleted;
}
4

1 に答える 1

0

この関連する質問を参照してください: EF 4: コレクションから子オブジェクトを削除しても削除されません - なぜですか?

RemoveどうやらとDeletewhereの間に意味的な違いがありRemove、外部キーを削除して行を孤立させ、Delete実際にテーブルからレコードを取り出します。

他の質問に関するユーザーvittoreの提案

dbcontext.DeleteObject(item);

ループ内。

于 2012-10-25T15:21:56.287 に答える