如何使用 Entity Framework 在 ASP.NET MVC 中检查删除操作是否成功

How to check if a delete operation succeeds in ASP.NET MVC using Entity Framework

有没有办法判断实体记录是否删除成功?请参阅下面的代码和评论。

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。

如果操作失败,那么您将在调用 SaveChangesAsync 时得到某种 DbUpdateException。因为您正在那里等待,所以当操作完成时它已被删除。如果出于某种原因您不信任它,请再次尝试查询该实体。不过我不建议这样做。

您可以查看文档 here,如果数据库操作失败,您将得到一个异常

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

db.SaveChanges returns 一个整数,而它们是受影响的记录数,因此您可以通过 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
}