Dapper 为少数对象返回空值

Dapper returning null values for few objects

在映射到 (queryasync)dapper 时,即使在数据库中有值,也有少数对象返回 null table。
PremiumCcy 、 ReportingClass2 、 SyndEPI 、 SyndGrossEPI 、 SyndExposure 、 LimitCcyISO

返回 Null

解决这个问题我真的很沮丧,已经投入了 3 天,非常感谢您的帮助。

我的代码:

  var query = @$"                   
                   SELECT 
    p.PolicyRef , 
    p.RenewedFromRef,
    p.PolicyId ,
    p.YOA as PolicyYOA,
p.PlacingType as PlacingType,
p.StatsCcyISO as PremiumCcy,
pl.SyndExposure,
pl.SyndEPI ,
pl.SyndGrossEPI,
    repClass.ReportingClass2,   
    plimit.LimitCcyISO, 
    lsp.LineSizePct as LineSizePct,
        (SELECT MAX(lastUpd) 
         FROM (
            VALUES (p.LastUpd), 
                (pl.LastUpd), 
                (plimit.LastUpd), 
                (repClass.LastUpd)
                ) AS VALUE(lastUpd)
        ) as LastUpd
FROM Policy p
    INNER JOIN PolicyLine pl
    ON p.PolicyId = pl.PolicyId
    LEFT JOIN ReportingClass repClass 
    ON p.YOA = repClass.PIMYear
    AND repClass.Synd = pl.Synd 
    AND repClass.ProducingTeam = pl.ProducingTeam
    AND repClass.Class1 = p.Class1
    AND repClass.Class2 = p.Class2
    AND repClass.Class3 = p.Class3
    AND repClass.Class4 = p.Class4 
    LEFT JOIN PolicyLimit plimit
    ON p.PolicyId = plimit.PolicyId
    AND plimit.TopLimitInd = 'Y'
    AND plimit.DelDate IS NULL
    AND plimit.Limit IS NOT NULL
WHERE pl.Synd = '1234'
    AND pl.LineStatus IN ('ABC', 'XYZ') 
        AND p.PlacingType <> 'DEC';
                    ;";



                    var eclipsePolicy = await connection.QueryAsync<EclipsePolicy, PolicyLines, ReportingClass, PolicyLimit, LineSize, EclipsePolicy>(query,
                        (eclipsePolicy, policyLines, reportingClass, policyLimit, lineSize) =>
                        {
                            eclipsePolicy.PolicyLines = policyLines;
                            eclipsePolicy.ReportingClasses = reportingClass;
                            eclipsePolicy.PolicyLimits = policyLimit;
                            eclipsePolicy.LineSizes = lineSize;
                            return eclipsePolicy;

                        }, CommandType.Text, connection.BeginTransaction(), splitOn: "PremiumCcy,SyndExposure,ReportingClass2,LimitCcyISO");

我使用的模型是

public class EclipsePolicy
    {
        public string PolicyRef { get; set; }  

        public string RenewedFromRef { get; set; } 

        public int PolicyId { get; set; }  

        public int PolicyYOA { get; set; } 

        public string PlacingType { get; set; } 

        public DateTime EclipseLastUpd { get; set; }  , 
        
        public PolicyLimit PolicyLimits { get; set; }
        public string PremiumCcy { get; set; }  
        public ReportingClass ReportingClasses { get; set; }
        public PolicyLines PolicyLines { get; set; }
        public decimal Premium  { get; set; }
        public LineSize LineSizes { get; set; }

    }

   public class PolicyLines
   {
       public decimal SyndEPI { get; set; }  

       public decimal SyndGrossEPI { get; set; }
       public string SyndExposure { get; set; } 
    }

   public class ReportingClass
   {
       public string ReportingClass2 { get; set; }  
   }

   public class PolicyLimit
   {
       public string LimitCcyISO { get; set; } 
   }

   public class LineSize
   {
       public decimal LineSizePct { get; set; }
    }

最好手动处理映射,看看是什么问题,如下所示:

      var result = await connection.QueryAsync<dynamic>(query);


                return MapResult(result);

 private dynamic MapResult(dynamic result)
        {
            var eclipsePolicy = new EclipsePolicy
            {
                EclipseLastUpd = result[0].EclipseLastUpd,
                .
                .
                .
                .
                ReportingClasses = result[0].ReportingClasses
            };
            var eclipsePolicy = new PolicyLines
            {
                SyndEPI = result[0].SyndEPI,

              .

              .

              .

              .
              SyndGrossEPI = result[0].SyndGrossEPI
            };


            return new {eclipsePolicy,eclipsePolicy ,...};
        }