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

为何Entity Framework Core中DbSet.FromSqlRaw忽略传入SQL返回所有行?

问题原因与解决方案

核心原因

EntityFrameworkCore.InMemory 6.0.1 不支持原始SQL查询,调用FromSqlRaw()时,内存数据库会直接忽略传入的SQL语句,返回整个DbSet的所有数据,这就是你看到返回全部7条记录的原因。

可行解决方案

  • 改用支持SQL查询的测试数据库:比如使用SQLite内存数据库(同样是内存级,但支持SQL语法),或者LocalDB这类轻量本地数据库。示例代码(SQLite内存库):
    // 配置DbContext使用SQLite内存库
    services.AddDbContext<YourDbContext>(options =>
        options.UseSqlite("Data Source=:memory:"));
    
    之后再调用FromSqlRaw()就能正常解析执行SQL语句。
  • 如果必须保留InMemory数据库:放弃使用原始SQL,改用LINQ查询实现相同逻辑,比如:
    var filteredRecords = _DbContext.Records
        .Where(rec => rec.RecordID == 3)
        .ToList();
    
    若要兼容管理员存储的原始SQL,你需要自己实现一套针对InMemory数据的SQL解析逻辑(复杂度较高,仅建议特殊场景使用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:12:20