使用实体框架(8.0.3),我希望找到受影响的行数,如果调用
DbContext.SaveChanges()
,而不实际保存对数据库的更改,则可以按照以下方式实现一些内容:
int numberOfChanges = MyDbContext.NumberOfChanges;
Console.WriteLine($"Save {numberOfChanges} changes? (y/n)");
if (Console.ReadKey() == 'y')
{ // ...
我查看了实现 DbContext 的类,没有发现任何表明已更改行数的表示形式。
我解决这个问题的想法包括:
DbSet<T>
上使用自定义 getter/setter(很混乱,并且在扩展实现时再次需要额外的维护)是否有更好的方法来查找
DbContext.SaveChanges()
通话中将进行的更改数量?
您可以通过
dbContext.ChangeTracker.Entries()
了解更改内容。
在你的情况下,它可能看起来像
int numberOfChanges = MyDbContext.ChangeTracker.Entries().Count();
Console.WriteLine($"Save {numberOfChanges} changes? (y/n)");
您可以获取所有已跟踪为 EF 的实体,然后检查它们的状态。
在 EF Core 中我们有 5 种状态:
var entries = context.ChangeTracker.Entries();
foreach(var entry in entries)
{
if(entry.State is Added or Modified or Deleted)
{
// here you can count affected row
}
}