Можно ли каким-либо образом сказать EF не беспокоиться о количестве строк в DELETE
или UPDATE
делать или не делать?
Я пытаюсь удалить строку из базы данных, но поскольку эта строка не существует, EF выдает исключение: DbUpdateConcurrencyException
.. говоря 0 строк были затронуты . Это правильно -> строки не были удалены. Но это совершенно нормально ... потому что данных нет.
Я действительно не хочу выполнять обход базы данных, чтобы увидеть, существует ли эта строка ... и если да ... тогда попробуйте удалить ее.
] Если я попытаюсь проглотить исключение в блоке 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 пытается быть удалена ... потому что исключение останавливает все: (
Есть идеи?
Как работает Удалить
? Вот код ... (упрощенный и строго типизированный)
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;
}
}