实体框架:查找将受更改影响的行数

问题描述 投票:0回答:2

使用实体框架(8.0.3),我希望找到受影响的行数,如果调用

DbContext.SaveChanges()
,而不实际保存对数据库的更改,则可以按照以下方式实现一些内容:

int numberOfChanges = MyDbContext.NumberOfChanges;
Console.WriteLine($"Save {numberOfChanges} changes? (y/n)");
if (Console.ReadKey() == 'y') 
{ // ...

我查看了实现 DbContext 的类,没有发现任何表明已更改行数的表示形式。

我解决这个问题的想法包括:

  • 按原样拍摄数据库的“快照”,保存更改,提取受影响的行数,然后将数据库重新设置为之前的状态(速度慢,占用内存,并且需要额外的代码维护)
  • 在 DbContext 实现中的每个
    DbSet<T>
    上使用自定义 getter/setter(很混乱,并且在扩展实现时再次需要额外的维护)

是否有更好的方法来查找

DbContext.SaveChanges()
通话中将进行的更改数量?

.net entity-framework
2个回答
0
投票

您可以通过

dbContext.ChangeTracker.Entries()
了解更改内容。 在你的情况下,它可能看起来像

int numberOfChanges = MyDbContext.ChangeTracker.Entries().Count();
Console.WriteLine($"Save {numberOfChanges} changes? (y/n)");

0
投票

您可以获取所有已跟踪为 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
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.