1

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

我最初使用以下方法实现了它

db.Courses.Remove(course);

但是后来我发现您还可以执行以下操作

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

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

有什么想法吗 ?

4

3 回答 3

2

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

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

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

于 2012-05-27T00:05:21.217 回答
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;

没有将订单标记为已删除。

于 2012-05-27T00:31:22.813 回答
1

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

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

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

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

于 2012-05-27T00:04:45.683 回答