【问题标题】:How to check if a delete operation succeeds in ASP.NET MVC using Entity Framework如何使用实体框架检查 ASP.NET MVC 中的删除操作是否成功
【发布时间】:2020-04-18 03:42:16
【问题描述】:

有没有办法确定实体记录是否被成功删除?请参阅下面的代码和 cmets。

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。

【问题讨论】:

  • prolly 通过检查 SaveChangesAsync 返回的内容
  • 如果数据库操作失败,则会引发错误。

标签: c# asp.net .net asp.net-mvc entity-framework-6


【解决方案1】:

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

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

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

    您可以查看文档 here,该文档显示如果 db 操作失败,您将收到异常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 2011-08-31
      相关资源
      最近更新 更多