C# 执行具有可为空FK的查询时Dapper引发NullReferenceExceptions
我正在尝试执行一个具有多个左联接的查询,因为其中一个外键列是可为null的,当Dapper发现某个记录中该特定列是可为null的时,当映射器尝试将结果放在一起时,会引发NullReferenceException。 我正在使用'Id'作为我的PK列,并且与其他任何表都没有问题,但是我不太确定解决这个问题的最佳方法 我需要能够返回一组结果,其中一些字段(和相关记录)可能为空,而其他字段可能不为空。。有没有一种方法可以绕过这个问题而不需要两个单独的查询 这是查询的一部分。。ani.DeviceMacAddress是可为空的FKC# 执行具有可为空FK的查询时Dapper引发NullReferenceExceptions,c#,sql,dapper,mapper,C#,Sql,Dapper,Mapper,我正在尝试执行一个具有多个左联接的查询,因为其中一个外键列是可为null的,当Dapper发现某个记录中该特定列是可为null的时,当映射器尝试将结果放在一起时,会引发NullReferenceException。 我正在使用'Id'作为我的PK列,并且与其他任何表都没有问题,但是我不太确定解决这个问题的最佳方法 我需要能够返回一组结果,其中一些字段(和相关记录)可能为空,而其他字段可能不为空。。有没有一种方法可以绕过这个问题而不需要两个单独的查询 这是查询的一部分。。ani.DeviceMac
(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;
},
我猜从位置看,
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;
我刚想到,这是QueryMultiple的任务吗?一个查询使用适当的映射将数据集限制在列不为null的位置,另一个查询使用自己的映射将数据集限制在列为null的位置?太棒了,谢谢Marc。我甚至没有想到在映射本身中检查null。