Как проверить, успешно ли выполняется операция удаления в ASP. NET MVC с использованием Entity Framework - PullRequest
1 голос
/ 18 апреля 2020

Есть ли способ определить, удаляется ли запись объекта успешно? Пожалуйста, смотрите код и комментарии ниже.

var myProductID = 123;

var productToDelete = await db.Products.Where(p => p.ID == myProductID).FirstOrDefaultAsync();

if (productToDelete != null)
{
    db.Entry(productToDelete).State = EntityState.Deleted;
    await db.SaveChangesAsync();
}

// At this point, is there a way to check whether the delete operation went thru successfully? In other words, I want to check if the record really got deleted from the database. I could run a re-query, but I don't want to do that.

Я использую. NET 4.7.2, ASP. NET MVC 5 и Entity Framework 6.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.dbcontext.savechanges?view=entity-framework-6.2.0

db.SaveChanges возвращает целое число, тогда как это число затронутых записей, поэтому вы можете проверить по db.SaveChanges() >= 0;

if (productToDelete != null)
{
   db.Entry(productToDelete).State = EntityState.Deleted;
   int changes = await db.SaveChangesAsync();

   if(changes>=0){
      // ... success
   }
   // it will throw an exception if failed
}

2 голосов
/ 18 апреля 2020

Если операция завершится неудачей, вы получите какое-то исключение DbUpdateException при вызове SaveChangesAsyn c. Поскольку вы ожидаете там, когда операция завершена, она была удалена. Если по какой-то причине вы не доверяете ему, попробуйте запросить эту сущность снова. Хотя я бы не советовал.

Вы можете увидеть документы здесь , которые показывают, что вы получите исключение в случае сбоя операции db

...