Как я могу игнорировать исключение DbUpdateConcurrencyException с моим кодом Entity Framework?

Можно ли каким-либо образом сказать 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;
    }
}
10
задан Pure.Krome 17 February 2011 в 02:12
поделиться