Невозможно вставить значение NULL в столбец в ASP.NET MVC Entity Framework

При попытке использовать этот код:

var model = new MasterEntities();

var customer = new Customers();
customer.Sessionid = 25641;

model.Customers.Add(customer);
model.SaveChanges();

Я получил:

{"Невозможно вставить значение NULL в столбец 'Sessionid', таблица 'master.dbo.Column'; столбец не допускает нулевые значения. INSERT завершается неудачей.\ R \n Определение завершено."}

Столбец "Sessionid" на самом деле является первичным ключом и помечен [KEY] следующим образом:

 public class Customers
    {   
        [Key]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }

Таким образом, в соответствии с этим вопросом, кажется, что когда свойство помечено [KEY], EF игнорирует мое собственное объявление Sessionid, поскольку ожидает, что база данных присвоит значение.

Так как я могу решить это? Если я удалю [KEY] Я получаю "entity type has no key defined" исключение...

2 ответа

Решение

Я решил это, добавив [DatabaseGenerated(DatabaseGeneratedOption.None)] как это:

public class Customers
    {   
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }

Вы можете настроить SQL для автоматической генерации (и автоинкрементации) первичного ключа для таблицы при вставках. Затем просто удалите [Ключ] в C#, и вам не нужно устанавливать идентификатор в приложении вручную, БД сгенерирует его для вас.

Я сталкивался с этой проблемой несколько раз при работе с Microsoft SQL Serverи я пошел тем же путем, чтобы исправить это. Чтобы решить эту проблему, убедитесь, что для параметра " Identity Specification" установлено значение " Да". Вот как это выглядит:

Таким образом, номер столбца автоматически увеличивается, как обычно это делает первичный ключ.

КАК?: щелкните правой кнопкой мыши таблицу, содержащую столбец, выберите " Дизайн", выберите первичный ключ, а в окне " Свойства столбца" найдите " Спецификацию удостоверения" и установите для него значение " Да".

Другие вопросы по тегам