【问题标题】:Dapper throwing NullReferenceExceptions when executing a query that has nullable FKsDapper 在执行具有可为空 FK 的查询时抛出 NullReferenceExceptions
【发布时间】:2014-09-01 06:53:19
【问题描述】:

我正在尝试执行一个具有多个左连接的查询,因为其中一个外键列可以为空,并且当 Dapper 找到该特定列可以为空的记录时,映射器会抛出 NullReferenceException试图把结果放在一起。 我使用“Id”作为我的 PK 列,并且没有遇到任何其他表的问题,但我不太确定解决这个问题的最佳方法。

我需要能够返回一组结果,其中一些字段(和相关记录)可能为空,而其他字段可能不为空。有没有办法在没有两个单独的查询的情况下解决这个问题?

这是查询的一部分。ani.DeviceMacAddress 是可为空的 FK。

(query,
(ani, adm, d, ma, sma, n, i, sni) =>
    {
        ani.DeviceMacAddress = adm;
        adm.Device = d;  // Throws NullReferenceException here
        adm.MacAddress = ma;
        ani.NetworkV4 = n;
        ani.IpAddressV4 = i;
        ani.Status = sni;
        ma.Status = sma;
        return ani;
    },

【问题讨论】:

  • 刚刚想到,这是 QueryMultiple 的任务吗?一个查询使用适当的映射将数据集限制在列不为空的位置,另一个查询使用自己的映射将数据集限制在列不为空的位置?

标签: c# sql dapper mapper


【解决方案1】:

我猜adm 是空的,从该位置。所以...检查一下:

ani.DeviceMacAddress = adm;
if(adm != null) {
    adm.Device = d;
    adm.MacAddress = ma;
}
ani.NetworkV4 = n;
ani.IpAddressV4 = i;
ani.Status = sni;
if(ma != null) {
    ma.Status = sma;
}
return ani;

【讨论】:

  • 太棒了,谢谢马克。我什至没有想过在地图本身中检查 null。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多