有什么办法可以告诉 EF 不要担心 aDELETE
或UPDATE
不做或不做的行数?
我正在尝试从数据库中删除一行,但由于该行不存在,EF 抛出异常:DbUpdateConcurrencyException
..说0 rows were affected。这是正确的-> 没有删除任何行。但这完全没问题..因为没有数据。
我真的不想往返数据库以查看该行是否存在..如果存在..然后尝试删除它。
如果我尝试在一个块中吞下异常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;
}
}