Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:
Предположим, что у вас есть класс с именем Student.
public class Student
{
private string FirstName;
private string LastName;
public string GetFullName()
{
return FirstName + LastName;
}
}
Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.
public class StudentInfo
{
public string GetStudentName()
{
Student s;
string fullname = s.GetFullName();
return fullname;
}
}
Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.
«Есть ли способ избежать ошибки мутирующей таблицы без использования временной таблицы для значений или автономной транзакции?»
blockquote>tl; dr no.
Ошибка мутирующей таблицы вызвана запросом таблицы, которая владеет триггером, или таблицами, которые связаны с отношением внешнего ключа с таблицей владения (по крайней мере, в более старых версиях базы данных, не уверен, приобретения).
В правильно спроектированном приложении это не обязательно. Именно поэтому многие считают, что мутационные таблицы являются индикатором плохого моделирования данных. Например, мутация часто связана с недостаточной нормировкой.
Перефразируя Джейми Завински: Некоторые люди, столкнувшись с исключением из мутировавшего стола, думают: «Я знаю, я буду использовать автономные транзакции». Теперь у них есть две проблемы.
Иногда ошибки можно избежать, просто изменив значения: NEW в триггере ДОПОЛНИТЕЛЬНОЕ ИЛИ ОБНОВЛЕНИЕ или используя виртуальные столбцы. Но вам нужно будет опубликовать более подробную информацию, чтобы узнать, применимы ли они.
Но лучшее обходное решение не нуждается в каком-либо другом виде.