Согласно документации (ссылка ниже), Convert.ToInt32 возвращает 0, когда строковым параметром является ноль .
Таким образом, следующая строка устанавливает MQCode на 0 , что является недопустимым значением внешнего ключа для MQCode.
MQCode = Convert.ToInt32(string.IsNullOrEmpty(txtMinmumQuantityNo.Text) ? null : txtMinmumQuantityNo.Text)
Вместо этого рассмотрите использование следующего:
MQCode = string.IsNullOrEmpty(txtMinmumQuantityNo.Text) ? (int?)null : Convert.ToInt32(txtMinmumQuantityNo.Text)
Это вернет либо ноль, либо целое число.
https://docs.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_String_