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

如何在C#实体中使用SQL原语?执行查询时遇错误求助

解决C#实体中使用SQL原语查询的错误问题

看起来你在使用Entity Framework执行原生SQL查询时遇到了问题,我来帮你梳理几个常见的错误点和对应的解决办法:

1. 误用了错误的DbSet集合

你代码里调用的是db.ChungLoais.SqlQuery(...),但查询的是dbo.Student表的字段——这明显不匹配!ChungLoais应该是对应数据库中另一个表的DbSet,你需要使用对应Student表的DbSet(通常命名为Students)来执行查询。

同时,你的Student实体类必须包含studentID和studentName这两个属性,且属性的类型、名称要和数据库字段完全匹配(如果大小写不一致,还需要添加[Column]特性指定数据库字段名,比如[Column("studentID")])。

2. 区分EF6和EF Core的API差异

不同版本的Entity Framework,原生SQL查询的API是不一样的:

如果你用的是EF6:

修正后的代码应该是这样:

// 先确保你的DbContext里定义了对应Student表的DbSet
public class studentEbestuur : DbContext
{
    public DbSet<Student> Students { get; set; }
    // 其他DbSet和配置...
}

// 查询代码
using(studentEbestuur db = new studentEbestuur()) 
{
    var ListST = db.Students.SqlQuery("SELECT studentID, studentName FROM dbo.Student").ToList();
}

如果你用的是EF Core:

EF Core推荐使用FromSqlRaw替代旧的SqlQuery方法:

// 同样确保DbContext里有Students这个DbSet
using(studentEbestuur db = new studentEbestuur()) 
{
    var ListST = db.Students.FromSqlRaw("SELECT studentID, studentName FROM dbo.Student").ToList();
}

3. 如果不需要返回完整实体(仅需指定字段)

如果你不想用Student实体类,只想返回查询的两个字段,可以自定义一个DTO类,然后通过数据库上下文直接执行查询:

EF6写法:

// 定义DTO类
public class StudentDto
{
    public int studentID { get; set; }
    public string studentName { get; set; }
}

// 查询
using(studentEbestuur db = new studentEbestuur()) 
{
    var ListST = db.Database.SqlQuery<StudentDto>("SELECT studentID, studentName FROM dbo.Student").ToList();
}

EF Core写法:

// 同样定义StudentDto类
using(studentEbestuur db = new studentEbestuur()) 
{
    var ListST = db.Set<StudentDto>().FromSqlRaw("SELECT studentID, studentName FROM dbo.Student").ToList();
}

最后需要检查的几个细节

  • 确认studentEbestuur上下文的连接字符串配置正确,能够访问目标数据库
  • 检查dbo.Student表是否存在,字段名studentID、studentName是否拼写正确
  • 确保你的应用程序有访问该数据库表的权限

内容的提问来源于stack exchange,提问作者Quyền Hoàng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:19:24