ASP.NET MVC控制器执行原生SQL查询返回对象属性为null求助
解决ASP.NET MVC中原生SQL查询返回对象属性为空的问题
问题场景
执行原生SQL查询后,返回的列表条目数量正确,但每个对象的属性值均为null,相关代码及表结构如下:
数据库表结构及数据
| Id | Column01 | Column02 | +----+----------+----------+ | 1 | Peter | Shaw | | 2 | Justus | Jonas | | 3 | Andrew | Miller |
接收结果的类定义
public class MyList { public string Column01 public string Column02 }
查询执行代码
string query = "SELECT Column01, Column02 FROM TableName"; var result = db.Database.SqlQuery<MyList>(query).ToList();
核心原因及解决方案
1. 接收类属性缺少getter/setter访问器
这是最常见的问题:EF在映射查询结果到对象时,需要通过属性的setter来完成赋值操作,你的MyList类仅定义了属性字段,没有提供get和set访问器,导致EF无法为属性赋值。
修复后的类定义:
public class MyList { public string Column01 { get; set; } public string Column02 { get; set; } }
2. 列名与属性名不匹配(可选排查)
如果数据库列名和类属性名存在大小写差异、名称不一致的情况(比如数据库列是column01小写,属性是Column01大写,部分数据库如PostgreSQL区分大小写),也会导致映射失败。
解决方式:
- 方式一:SQL中使用别名对齐属性名
SELECT column01 AS Column01, column02 AS Column02 FROM TableName
- 方式二:通过DataAnnotations指定列映射
using System.ComponentModel.DataAnnotations.Schema; public class MyList { [Column("column01")] public string Column01 { get; set; } [Column("column02")] public string Column02 { get; set; } }
内容的提问来源于stack exchange,提问作者post4dirk
相关产品推荐
相关产品推荐

