实体 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 在 QueryableExtensions
和 System.Data.Entity
中可用。
我有一个我无法理解的奇怪错误。设置断点和本地手表后,它来到了这里:
尽管集合 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 在 QueryableExtensions
和 System.Data.Entity
中可用。