为何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查询实现相同逻辑,比如:
若要兼容管理员存储的原始SQL,你需要自己实现一套针对InMemory数据的SQL解析逻辑(复杂度较高,仅建议特殊场景使用)。var filteredRecords = _DbContext.Records .Where(rec => rec.RecordID == 3) .ToList();
内容的提问来源于stack exchange,提问作者Kyle Alm
相关产品推荐
相关产品推荐

