Вставьте Null в базу данных с Entity Framework SQL - PullRequest
0 голосов
/ 23 октября 2019
private void BtnAdd_Click(object sender, EventArgs e)
{
    Model.Item items = new Model.Item
    {
        Code = Convert.ToInt32(txtCode.Text),
        Name = txtName.Text,
        MQCode = Convert.ToInt32(string.IsNullOrEmpty(txtMinmumQuantityNo.Text) ? null :   txtMinmumQuantityNo.Text)
    };
    db.Items.Add(items);
    db.SaveChanges();
}

Ошибка

SqlException: оператор INSERT конфликтует с ограничением FOREIGN KEY "FK_Items_MQ". Конфликт произошел в базе данных «C: \ USERS \ 20101 \ DESKTOP \ SIGMA V1 \ SIGMA V1 \ BIN \ DEBUG \ SIGMA.MDF», таблица «dbo.MQ», столбец «MQCode». Заявление было прекращено.

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Согласно документации (ссылка ниже), 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_

0 голосов
/ 23 октября 2019

Похоже, это поле не обнуляется. Он должен иметь фактическое значение.

...