Jef*_*eff 9 c# linq entity-framework
我正在使用.NET 3.5 SP1.我有一个简单的脚本删除一些实体.
var people = (from Person p in context.People
              where p.FirstName == "Testy" && 
                    p.LastName == "McTesterson"
              select p).ToList();
people.ForEach(p => context.DeleteObject(p));
//context.AcceptAllChanges();
context.SaveChanges();
如果取消注释AcceptAllChanges(),则不会删除对象.如果我保持评论,则删除实体.为什么EF表现得像这样?这似乎适得其反.
Lad*_*nka 17
这就是行为AcceptAllChanges.接受更改会"重置"内部状态ObjectContext.这意味着添加或修改的所有实体都设置为"未更改"状态,并且已删除的所有实体都与上下文分离.
相反,SaveChanges方法迭代内部状态ObjectContext并为每个实体创建INSERT db命令,其中状态为已修改状态的每个实体的已添加 UPDATE db命令,以及已删除状态中每个实体的DELETE db命令.默认情况下,在执行所有命令后接受所有更改.SaveChanges
如果AcceptAllChanges在SaveChanges清除所有更改之前运行,则无法在DB中执行任何操作.此方法存在的原因是您可以关闭默认SaveChanges行为; 在这种情况下,您必须在执行后手动接受更改SaveChanges.否则,下一次调用SaveChanges将再次执行更改.
| 归档时间: | 
 | 
| 查看次数: | 5391 次 | 
| 最近记录: |