使用EntityFramework查询无返回值问题求助
Entity Framework 查询无数据/调试变量不显示的排查方案
先排查最常见的几个问题:
数据库连接配置错误
检查项目的App.config(控制台/类库)或Web.config(MVC项目)里的连接字符串,确保指向的是你有数据的那个数据库。EF默认会找和DbContext同名的连接串,示例配置如下:<connectionStrings> <add name="AppContext" connectionString="Data Source=你的SQL服务器名;Initial Catalog=目标数据库名;Integrated Security=True;" providerName="System.Data.SqlClient" /> </connectionStrings>实体与数据库表映射不匹配
EF默认约定实体类MyObject会对应数据库表MyObjects(复数形式),但你的DbSet命名是mytable,如果数据库实际表名是mytable,需要手动指定映射:- 用DataAnnotation方式(直接在实体类上加特性):
using System.ComponentModel.DataAnnotations.Schema; [Table("mytable")] public class MyObject { public int Id { get; set; } public string name { get; set; } } - 用Fluent API方式(在
AppContext里配置):public class AppContext : DbContext { public DbSet<MyObject> mytable { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<MyObject>().ToTable("mytable"); } }
- 用DataAnnotation方式(直接在实体类上加特性):
调试时未正确查看变量
调试断点停在return View(objects);时,需要手动展开objects变量,或者在即时窗口输入objects.Count()来查看是否有数据。调试器默认不会自动展开集合内容,有时候看起来像变量不存在,实际是没展开。查看EF生成的SQL语句
可以在AppContext的构造函数里添加日志输出,看EF实际生成的SQL是什么,直接复制到数据库工具里执行验证:public AppContext() { // 把SQL输出到调试窗口 Database.Log = s => System.Diagnostics.Debug.WriteLine(s); }运行程序后,在Visual Studio的输出窗口(选择"调试"输出)里就能看到生成的查询语句,执行它确认是否能返回数据。
内容的提问来源于stack exchange,提问作者dy3zz1
相关产品推荐
相关产品推荐

