【问题标题】:Entity Framework 6.0 ChangeTracker.Entries non public membersEntity Framework 6.0 ChangeTracker.Entries 非公共成员
【发布时间】:2015-03-22 00:13:02
【问题描述】:

在我的项目中,我正在重写实体 saveChanges() 方法,如下所示。

public override int SaveChanges()
    {
        foreach (var entity in ChangeTracker.Entries()
        .Where(p => p.State == EntityState.Added || p.State == EntityState.Deleted || p.State == EntityState.Modified))
        {
           // Logs
        }

        return base.SaveChanges();
    }

但是,ChangeTracker.Entries() 表示非公共成员。这不是错误,但我必须采用记录值。因为 ChangeTracker.Entries() count=0 ,我无能为力。我正在使用 Entityframework 6.0 谢谢。

【问题讨论】:

  • 你说的非公共成员是什么意思?我试过你的代码它没有问题......这里有什么问题?
  • 调试的时候,没有进入foreach语句。

标签: c# entity-framework


【解决方案1】:

实体框架仅在映射到数据库字段时跟踪公共属性的更改。

如果要跟踪对象的更改,则需要更改公共属性。

您还应该在使用ChangeTracker.Entries() 之前调用ChangeTracker.DetectChanges(),如documentation 中所述。

编辑:添加了关于ChangeTracker.DetectChanges()的评论

【讨论】:

  • 你需要更改公共属性是什么意思?
  • 在 ChangeTracker.Entries() 期间仅检查 1. 公共属性和 2. 具有与数据库字段的活动映射的条目。另一点:您应该始终添加对ChangeTracker.DetectChanges() 的调用以查找所有更改。我已经相应地更新了答案。
猜你喜欢
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多