Превосходное выбрасывание исключений NullReferenceException при выполнении запроса, содержащего обнуляемые FK

1

Я пытаюсь выполнить запрос, который имеет несколько левых объединений, поскольку один из столбцов внешнего ключа имеет значение NULL, и когда Dapper находит запись, в которой этот конкретный столбец имеет значение NULL, исключение 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;
    },
  • 1
    Просто подумал, это задача для QueryMultiple? Один запрос, который ограничивает набор данных в том месте, где столбец не равен нулю с соответствующей картой, а другой, который ограничивает набор данных в том месте, где столбец является нулевым, с его собственной картой?
Теги:
dapper
mapper

1 ответ

1
Лучший ответ

Я предполагаю, что adm имеет значение null, из местоположения. Итак... проверьте это:

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;
  • 0
    Фантастика, спасибо Марк. Я даже не думал о проверке на ноль в самой карте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню