【问题标题】:deleting entries from db从数据库中删除条目
【发布时间】:2012-05-26 23:41:17
【问题描述】:

我最近注意到有两种不同的方法可以从实体框架中的数据库中删除一个条目。

我最初使用以下实现它

db.Courses.Remove(course);

但后来我发现你也可以这样做

db.Entry(course).State = EntityState.Deleted;

这两者有什么区别吗? 我认为切换到后者的唯一原因是在我的实现中更加一致,因为这是我用来编辑条目的方法。

有什么想法吗?

【问题讨论】:

  • Remove() 方法只是我猜想的状态的方便帮手。

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


【解决方案1】:

这两种方法都将实体标记为已删除,因此接下来的 db.SaveChanges();将它们从数据库和上下文中删除。

本文介绍了添加、修改和删除实体的所有方法。

http://msdn.microsoft.com/en-us/library/gg696174(v=vs.103).aspx

【讨论】:

    【解决方案2】:

    是的,两者之间存在差异。

    如果您在模型上设置了级联选项,以便当客户被标记为已删除时,在上下文中加载的订单也会被标记为删除。

    例如

    var customer = db.Customers.Include(c => c.Orders).First(c => c.CustomerId == 1); db.Customers.Remove(customer); // at this point all orders in teh context are also marked as deleted.

    但是当你这样做时

    db.Entry(customer).State = EntityState.Deleted;

    不将订单标记为已删除。

    【讨论】:

      【解决方案3】:

      他们都做大致相同的事情。

      后者只是将记录状态设置为已删除,前者设置为已分离。您仍然需要调用以保存更改以反映记录删除。

      using (var context = new SchoolEntities ()) 
      {
           var dpt = new Department { Name = "Mathematics", DepartmentID = 1};
           context.Entry(dpt).State = EntityState.Added;
           context.SaveChanges(); 
      }
      

      显示的代码与其他答案来自相同的资源

      【讨论】:

      • 在这两种情况下,您都需要调用 SaveChanges(),并且在这两种情况下,它们都被标记为已删除(实际上已删除)。
      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2017-07-26
      • 2021-12-24
      相关资源
      最近更新 更多