如何在Entity Framework 8.0.3中预获取SaveChanges()影响行数?
在Entity Framework 8.0.3中预获取SaveChanges将影响的行数
直接利用EF原生的ChangeTracker即可实现,这是最简洁高效的方案,无需操作数据库或额外维护代码:
核心实现逻辑
EF的ChangeTracker会自动跟踪所有附加到DbContext的实体状态变更,我们只需统计其中状态为Added、Modified、Deleted的实体总数,这就是SaveChanges()将影响的行数。
代码示例
// 统计待提交的变更数量 var pendingChangesCount = myDbContext.ChangeTracker.Entries() .Count(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted); Console.WriteLine($"Save {pendingChangesCount} changes? (y/n)"); if (Console.ReadKey().KeyChar == 'y') { myDbContext.SaveChanges(); }
封装复用(可选)
如果需要在多个地方使用,可以封装成DbContext的扩展方法:
public static class DbContextExtensions { public static int GetPendingChangeCount(this DbContext context) { return context.ChangeTracker.Entries() .Count(e => e.State is EntityState.Added or EntityState.Modified or EntityState.Deleted); } }
使用时直接调用:
int numberOfChanges = myDbContext.GetPendingChangeCount();
对比你提到的方案
- 数据库快照法:完全没必要,
ChangeTracker已经在内存中维护了所有变更状态,无需额外快照和恢复操作,性能差且代码冗余。 - 自定义DbSet的getter/setter:繁琐且扩展性差,EF原生的变更跟踪机制已经覆盖了所有实体的状态监控,不需要重复造轮子。
内容的提问来源于stack exchange,提问作者Josh Brunton
相关产品推荐
相关产品推荐

