Невозможно вставить значение 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" установлено значение " Да". Вот как это выглядит:
Таким образом, номер столбца автоматически увеличивается, как обычно это делает первичный ключ.
КАК?: щелкните правой кнопкой мыши таблицу, содержащую столбец, выберите " Дизайн", выберите первичный ключ, а в окне " Свойства столбца" найдите " Спецификацию удостоверения" и установите для него значение " Да".