我最近注意到有两种不同的方法可以从实体框架中的DB中删除条目。从db中删除条目
我原本执行它使用以下
db.Courses.Remove(course);
但后来我发现,你还可以做以下
db.Entry(course).State = EntityState.Deleted;
是两者之间有什么区别? 我可以想到我切换到后者的唯一原因是在我的实现中更一致,因为这是我用来编辑条目的方法。
有什么想法?
我最近注意到有两种不同的方法可以从实体框架中的DB中删除条目。从db中删除条目
我原本执行它使用以下
db.Courses.Remove(course);
但后来我发现,你还可以做以下
db.Entry(course).State = EntityState.Deleted;
是两者之间有什么区别? 我可以想到我切换到后者的唯一原因是在我的实现中更一致,因为这是我用来编辑条目的方法。
有什么想法?
这两种方法都标记为删除的实体,所以下db.SaveChanges();从数据库和上下文中删除它们。
本文介绍您可以添加,修改和删除实体的所有方法。
http://msdn.microsoft.com/en-us/library/gg696174(v=vs.103).aspx
他们都做大致相同的事情。
后者只是将记录状态设置为删除,前者为Detached。您仍然必须致电保存更改以反映记录删除。所示
using (var context = new SchoolEntities())
{
var dpt = new Department { Name = "Mathematics", DepartmentID = 1};
context.Entry(dpt).State = EntityState.Added;
context.SaveChanges();
}
代码是从相同的资源的其他回答
在这两种情况下,您都需要调用SaveChanges(),并且在这两种情况下它们都被标记为已删除(并实际删除)。 –
是的我看到了,说错了 –
是,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;
为删除不标明订单。
Remove()方法只是围绕我猜想的状态提供的便利帮助。 –