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

时间:2015-02-13 16:20:24

标签: entity-framework linq-to-entities

我有一个奇怪的错误我无法理解。设置断点和本地手表之后,它就出现了:

enter image description here

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

为了完整性:

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

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

1 个答案:

答案 0 :(得分:3)

DbSet<T>.Local包含先前查询已从数据库中检索的条目集合。除此之外,其目的是节省不必要的往返旅程。

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

要解决您的问题,请使用直截了当的db.Users.Count(),它会查询数据库以获取计数,或者通过调用Local来填充Load(),从EF6开始QueryableExtensions中的System.Data.Entity中提供。

相关问题