You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,可以:

  1. 给BaseEntity的IsDeleted属性设置默认值,确保新插入的记录默认不被标记为删除:
    public bool IsDeleted { get; set; } = false;
    
  2. 在OnModelCreating中配置数据库层面的默认值:
    modelBuilder.Entity<BaseEntity>()
        .Property(e => e.IsDeleted)
        .HasDefaultValue(false);
    
  3. 批量更新现有数据库中IsDeleted = true但实际未删除的记录:
    UPDATE Prices SET IsDeleted = 0 WHERE IsDeleted = 1;
    

关于SQLite LIMIT配置

不需要额外配置LIMIT,EF Core默认不会对查询自动添加LIMIT限制,你的问题和LIMIT完全无关。

内容的提问来源于stack exchange,提问作者TropicalViking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:11:05