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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:37:05