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

时间:2014-07-03 06:50:43

标签: c# entity-framework ef-code-first

我使用实体框架6.1和Code First方法。 当我使用DbContext.SaveChanges()作为结果时,我可以得到

  

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

但是可以获得高级统计信息:删除的行数,编辑的行数,添加的行数?

我的超级目标是获得每个实体的静态。

也许在实际调用SaveChanges()之前..

3 个答案:

答案 0 :(得分:9)

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

以上代码行可用于获取修改后的条目,同样您也可以获取已删除的条目并添加...

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

答案 1 :(得分:1)

您可以使用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 

参考:

答案 2 :(得分:-1)

根据documentation,DbContext.SaveChanges的返回值是

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

所以只有在没有实体需要保存到数据库时才能看到你所看到的。