获取DbContext.SaveChanges()删除的行数和编辑的行数

本文关键字:编辑 删除 DbContext SaveChanges 获取 | 更新日期: 2023-09-27 18:11:11

我使用实体框架6.1与代码优先的方法。当我使用DbContext.SaveChanges()作为结果时,我可以得到

写入底层数据库的对象数量。

但是,是否有可能获得高级统计数据:删除的行数,编辑的行数,添加的行数?

我的超级目标是获得每个实体的统计信息。

可能在实际调用SaveChanges()之前…

获取DbContext.SaveChanges()删除的行数和编辑的行数

var modifiedCount = dbContext.ChangeTracker.Entries().Where(x => x.State == System.Data.EntityState.Modified).Count()

上面的代码行可以用来获取修改过的条目,同样你也可以获取删除和添加的条目。

但是您必须在调用SaveChanges()之前执行这些代码行

您可以使用db.GetChangeSet()。这将包含三个列表:

var deletes = db.GetChangeSet().Deletes;
var updates = db.GetChangeSet().Updates;
var inserts = db.GetChangeSet().Inserts;
var all = db.GetChangeSet().All;

这可以在向数据库提交更改之前完成。

考虑创建一个名为country的表

db.Tblcountries.InsertOnSubmit(
   new Tblcountry(){FkRegionId=1,CountryCode="US",Name="USA"});
var result= db.GetChangeSet().All.ToList();

All列表和Insert列表将包含以下列表:

PkCountryId Name CountryCode FkRegionId 
0           USA  US          1 
参考:

  • DataContext。/ul>

根据文档,DbContext的返回值。SaveChanges是

写入底层数据库的对象数量。

因此,只有当不需要将实体保存到数据库中时,才有可能出现您所看到的情况。