从db中删除条目

时间:2012-05-26 23:41:18

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

我最近注意到有两种不同的方法可以从Entity Framework中的DB中删除条目。

我最初使用以下

实现了它
db.Courses.Remove(course);

但后来我发现你也可以做以下事情

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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;

未将订单标记为已删除。

答案 2 :(得分:1)

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

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

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

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