Linq查询Sqlite数据库仅返回部分数据,如何获取全部行?
解决EF Core查询SQLite仅返回部分数据的问题
你的问题核心原因是全局查询过滤器的自动过滤,和SQLite的LIMIT配置无关,具体分析和解决方法如下:
问题根源
在DataContext的OnModelCreating方法中,你给基类BaseEntity添加了全局查询过滤器:
modelBuilder.Entity<BaseEntity>() .HasQueryFilter(e => !e.IsDeleted);
这个过滤器会自动应用到所有继承BaseEntity的实体(比如Price)的所有查询上,只返回IsDeleted = false的记录。你数据库中60多条记录里,应该只有4条满足IsDeleted = false,其余均被过滤器拦截。
获取所有行的方法
方法1:查询时忽略全局过滤器
如果需要临时绕过过滤器获取所有记录,使用IgnoreQueryFilters()扩展方法:
var prices = _context.Prices.IgnoreQueryFilters().ToList();
方法2:修正数据或默认值逻辑
如果是数据库中大量记录的IsDeleted被错误设置为true,可以:
- 给
BaseEntity的IsDeleted属性设置默认值,确保新插入的记录默认不被标记为删除:public bool IsDeleted { get; set; } = false; - 在
OnModelCreating中配置数据库层面的默认值:modelBuilder.Entity<BaseEntity>() .Property(e => e.IsDeleted) .HasDefaultValue(false); - 批量更新现有数据库中
IsDeleted = true但实际未删除的记录:UPDATE Prices SET IsDeleted = 0 WHERE IsDeleted = 1;
关于SQLite LIMIT配置
不需要额外配置LIMIT,EF Core默认不会对查询自动添加LIMIT限制,你的问题和LIMIT完全无关。
内容的提问来源于stack exchange,提问作者TropicalViking
相关产品推荐
相关产品推荐

