オブジェクトを削除するコードのスニペットを次に示します。
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;
}