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

Dapper执行QueryAsync映射时部分数据库有值的字段返回null如何解决

问题根因

你的字段返回null的核心原因是Dapper多映射的splitOn参数配置错误,其次还有字段别名和模型属性不匹配的问题:

  • Dapper多映射规则是:splitOn参数需要按顺序填写每个后续映射实体的第一个返回列名,多个列名用逗号分隔,你当前的配置顺序完全错误,导致字段被拆分到了错误的实体类中,自然对应实体的属性拿到的就是null。
  • 你返回的LastUpd列和EclipsePolicy类中的EclipseLastUpd属性名不匹配,也会导致该属性无法正确赋值。

具体修复方案

1. 修正splitOn参数配置

你现在的多映射是5个实体,顺序为EclipsePolicy→PolicyLines→ReportingClass→PolicyLimit→LineSize,对应的拆分点应该是后四个实体各自的第一个返回列,也就是:

// 原错误配置
splitOn: "PremiumCcy,SyndExposure,ReportingClass2,LimitCcyISO"
// 修改为正确配置
splitOn: "SyndExposure,ReportingClass2,LimitCcyISO,LineSizePct"

注意:PremiumCcy本身是EclipsePolicy的属性,不能作为第一个拆分点,你之前的配置把PremiumCcy划给了第二个实体PolicyLines,所以EclipsePolicy的PremiumCcy直接取不到值。

2. 修正SQL查询中的列别名

把SQL中最后计算的LastUpd字段别名修改为和模型属性一致:

-- 原写法
) as LastUpd
-- 修改为
) as EclipseLastUpd

3. 可选适配可空字段

如果数据库中SyndEPI、SyndGrossEPI字段允许为null,把PolicyLines类中对应属性改为可空值类型,避免映射失败:

public class PolicyLines
{
    public decimal? SyndEPI { get; set; }  
    public decimal? SyndGrossEPI { get; set; }
    public string SyndExposure { get; set; } 
}

验证步骤

修改完成后先单独在数据库中执行你的SQL语句,确认PremiumCcy等几个字段确实有返回值,排除LEFT JOIN匹配不到返回null的情况,再运行代码测试映射即可。


内容的提问来源于stack exchange,提问作者Tejaswini Mahajan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:09:03