2012-05-26 177 views
1

我最近注意到有两种不同的方法可以从实体框架中的DB中删除条目。从db中删除条目

我原本执行它使用以下

db.Courses.Remove(course); 

但后来我发现,你还可以做以下

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

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

有什么想法?

+0

Remove()方法只是围绕我猜想的状态提供的便利帮助。 –

回答

1

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

后者只是将记录状态设置为删除,前者为Detached。您仍然必须致电保存更改以反映记录删除。所示

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

代码是从相同的资源的其他回答

+0

在这两种情况下,您都需要调用SaveChanges(),并且在这两种情况下它们都被标记为已删除(并实际删除)。 –

+0

是的我看到了,说错了 –

2

是,thare是他们两人之间的差异。

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

例如

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;

为删除不标明订单。