You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:32:45