实体 DbSet 和 Any() 在空集合上生成 true

Entity DbSet and Any() producing true on empty collection

我有一个我无法理解的奇怪错误。设置断点和本地手表后,它来到了这里:

尽管集合 db.Users 是空的,但 _temp 怎么可能是真的(即集合 db.Users 包含名称为 "dummy" 的用户)?

完整性:

public class DBCUsers : DbContext {
    public DbSet<User> Users { get; set; } 
}

public class User {
    public int ID {get; set;}
    public string Name {get; set;}
}

DbSet<T>.Local 包含先前查询已从数据库中检索到的条目集合。除其他外,这个想法是为了节省不必要的往返。

除非您之前在上下文中执行过查询以检索 User 个实体,否则 Local 将为空。您对 Any() 的调用可以转换为 SQL 查询,其中 returns 是一个布尔值,因此它不会导致上下文检索任何实体。

要解决您的问题,请使用直接的 db.Users.Count(),这将查询数据库以获取计数,或者通过调用 Load() 来填充 Local,从EF6 在 QueryableExtensionsSystem.Data.Entity 中可用。