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

.NET 8 Preview AOT Web API项目中使用Dapper.Aot时SqlConnection无Query等查询方法的问题

.NET 8 Preview AOT Web API项目中使用Dapper.Aot时SqlConnection无Query等查询方法的问题

你遇到的这个问题其实是Dapper.AOT和传统Dapper核心库的用法差异导致的——毕竟Dapper.AOT是专门为AOT编译场景设计的,它放弃了传统Dapper依赖的动态扩展方法(这种方式在AOT环境下会因为反射/动态代码生成的限制而无法工作),改用了编译时生成代码的模式,所以你没法直接在SqlConnection上调用Query这类扩展方法。

下面给你两种可行的解决方式:

方法一:使用Dapper静态类的Query方法

把原来的con.Query<Program>(...)改成调用静态的Dapper.Query方法,传入你的连接对象和查询语句即可:

using Microsoft.Data.SqlClient;
using Dapper;
using System.Data;

// ... 你的连接初始化代码
using var con = new SqlConnection(_connectionString);
con.Open();

// 改用静态Query方法
var test5 = Dapper.Query<Program>(con, "SELECT Name, Acronym FROM Programs");

方法二:使用Dapper.Command对象构建查询

Dapper.AOT还提供了Command<T>类型,这种方式更适合复杂的参数化查询场景,步骤如下:

using var con = new SqlConnection(_connectionString);
con.Open();

// 创建对应实体的Command查询对象
var queryCommand = new Dapper.Command<Program>("SELECT Name, Acronym FROM Programs");
// 执行查询并获取结果
var test5 = queryCommand.Execute(con);

额外需要注意的几个细节

  • 确保你的Program实体类上的[DapperAot]特性确实生效了,而且类的属性名称和SQL查询返回的列名一致;如果列名和属性名不匹配,可以用[Column("ColumnName")]特性做映射。
  • 检查你安装的Dapper.AOT包是否是最新版本,毕竟.NET 8还在预览阶段,Dapper.AOT的适配可能会有更新修复。
  • 确认你的项目已经正确配置了AOT编译:在项目文件(.csproj)里要包含<PublishAot>true</PublishAot>,并且使用的是符合要求的.NET 8预览版SDK。
  • 可以尝试清理项目的bin和obj目录,重新生成解决方案,确保Dapper.AOT在编译时正确生成了对应的执行代码。

备注:内容来源于stack exchange,提问作者Jason Durnil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:47:57