c# – AcceptAllChanges导致实体框架…不接受更改?

前端之家收集整理的这篇文章主要介绍了c# – AcceptAllChanges导致实体框架…不接受更改?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用的是.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这样做?似乎有效果.

解决方法

那就是AcceptAllChanges的行为.接受更改“重置”ObjectContext的内部状态.这意味着添加修改的所有实体都被设置为“不变”状态,所有被删除的实体都与上下文分离.

相比之下,SaveChanges方法迭代ObjectContext的内部状态,并为每个具有添加状态的实体创建INSERT数据库命令,每个被修改状态的实体都有UPDATE db命令,并且每个被删除状态的实体都使用DELETE db命令.默认情况下,SaveChanges在执行所有命令后接受所有更改.

如果在SaveChanges之前运行AcceptAllChanges,则清除所有更改,并且在DB中无法执行任何操作.存在此方法的原因是您可以关闭默认SaveChanges行为;在这种情况下,您必须在执行SaveChanges后手动接受更改.否则,下一次调用SaveChanges将再次执行更改.

猜你在找的C#相关文章