【问题标题】:Dapper returning null values for few objectsDapper 为少数对象返回空值
【发布时间】:2021-07-24 01:33:27
【问题描述】:

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

我真的很沮丧解决这个问题,已经投入了 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; }
    }

【问题讨论】:

  • 如果在 SQL Server Management Studio 中运行该查询会发生什么? (或您数据库的任何管理工具)
  • Sql server 返回想要的输入

标签: c# dapper


【解决方案1】:

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

      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 ,...};
        }

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2018-08-07
    • 2014-10-04
    • 2016-10-07
    相关资源
    最近更新 更多