加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:49:15 所属栏目:百科 来源:网络整理
导读:我使用的是.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.Accept
我使用的是.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将再次执行更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读