我最近注意到有两种不同的方法可以从Entity Framework中的DB中删除条目。
我最初使用以下
实现了它db.Courses.Remove(course);
但后来我发现你也可以做以下事情
db.Entry(course).State = EntityState.Deleted;
这两者有什么区别吗? 我能想到切换到后者的唯一原因是我的实现更加一致,因为这是我用来编辑条目的方法。
有什么想法吗?
答案 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();
}
显示的代码来自与其他答案相同的资源