行数を気にしないように EF に指示する方法はありますDELETE
かUPDATE
?
データベースから行を削除しようとしていますが、行が存在しないため、EF は例外をスローします: DbUpdateConcurrencyException
.. 0 行が影響を受けたと言っています。これは正しいです -> 行は削除されませんでした。しかし、それはまったく問題ありません..データがないからです。
その行が存在するかどうかを確認するためにDBへのラウンドトリップを実際に行いたくありません..存在する場合は..それを試して削除します。
ブロック内の例外を飲み込もうとすると、try / catch
削除しようとしている残りのアイテムがデータベースに送信されませんSaveChanges()
...これは悪いことです。
例えば。
Delete(new Foo(1));
Delete(new Foo(2));
Delete(new Foo(3));
SaveChanges(); // <-- Throws the exception.
// DB Trace : DELETE FROM Foo WHERE Id = 1;
それだけです..削除しようとしているレコード2または3を示すトレースはありません..例外がすべてを停止するため:(
何か案は?
アップデート
どのように機能しDelete
ますか?コードは次のとおりです...(簡略化され、厳密に型指定されています)
public void Delete(Foo foo)
{
if (foo == null)
{
throw new ArgumentNullException("foo");
}
Foo attachedEntity = Context.Set<Foo>().Local.FirstOrDefault(x => x.Id > 0);
if (attachedEntity != null)
{
// Entity already in object graph - remove entity.
Context.Set<Foo>().Remove(attachedEntity);
}
else
{
// Entity not in object graph, attach and set EntityState to Deleted.
Context.Entry(foo).State = EntityState.Deleted;
}
}