实体框架 DbEntityEntry> '不包含 Where 的定义

Posted

技术标签:

【中文标题】实体框架 DbEntityEntry> \'不包含 Where 的定义【英文标题】:Entity Framework DbEntityEntry> 'Does not contain a definition for Where实体框架 DbEntityEntry> '不包含 Where 的定义 【发布时间】:2013-10-26 18:16:13 【问题描述】:

此代码狙击来自Adding CreatedDate to an entity using Entity Framework 5 Code First

        public override int SaveChanges()
    
        DateTime saveTime = DateTime.Now;
        foreach (var entry in this.ChangeTracker.Entries().Where(e => e.State == System.Data.EntityState.Added))
        
            if (entry.Property("CreateDate").CurrentValue == null)
                entry.Property("CreateDate").CurrentValue = saveTime;
        
        return base.SaveChanges();

    

但在我的解决方案中,我收到此错误“System.Collection.Generic.IEnumerable 'Does not contain a definition for Where ...

【问题讨论】:

检查您是否有 System.Linq 的 using 语句 你有System.Linq using 语句? 【参考方案1】:

我期待你失踪using System.Linq

【讨论】:

谢谢大家我错过了 System.Linq 但 VS 无法解决它 试试 Resharper 它是建议和解决使用程序集和组织代码的好工具【参考方案2】:

尝试在另一种方法中使用您的代码并在您的 SaveChanges 方法中调用它 像这样的东西。就在你的 savechanges 方法上面写

private void MyRule() 

  DateTime saveTime = DateTime.Now;
    foreach (var entry in this.ChangeTracker.Entries().Where(e => e.State == System.Data.EntityState.Added))
    
        if (entry.Property("CreateDate").CurrentValue == null)
            entry.Property("CreateDate").CurrentValue = saveTime;
    
 

然后在你的保存更改中调用它

public override int SaveChanges()

 this.MyRule();
 return base.SaveChanges();

这应该可以解决问题:)

干杯!

【讨论】:

以上是关于实体框架 DbEntityEntry> '不包含 Where 的定义的主要内容,如果未能解决你的问题,请参考以下文章

将 SaveChange 中的旧值和新值保存为 DbEntityEntry.Entity 以进行审计

模拟或伪造 DbEntityEntry 或创建新的 DbEntityEntry

EF增删库查

将测试替身与 DbEntityEntry 和 DbPropertyEntry 一起使用

对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。

加入前包含不起作用实体框架6