0

Я пытаюсь обновить первичный ключ моей таблицы как целочисленный идентификатор автоинкремента.EF 6 Code First - Целочисленный первичный ключ - Невозможно вставить значение NULL в столбец

Это моя сущность:

public class Reservation 
{ 
    public int Id { get; set; } 
    public ReservationStatus Status { get; set; } 
    public string Name { get; set; } 
    public string CustomerName { get; set; } 

    ... 
} 

Это мой OnModelCreating метод:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     ... 

     modelBuilder.Entity<Reservation>() 
      .HasKey(e => e.Id) 
      .Property(e => e.Id) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     ... 
    } 

Это генерируемый миграция:

public partial class Reservations_AlterKey_Id_AutoIncrement : DbMigration 
{ 
    public override void Up() 
    { 
     DropPrimaryKey("dbo.Reservations"); 
     AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false, identity: true)); 
     AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String()); 
     AddPrimaryKey("dbo.Reservations", "Id"); 
    } 

    public override void Down() 
    { 
     DropPrimaryKey("dbo.Reservations"); 
     AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String(nullable: false, maxLength: 128)); 
     AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false)); 
     AddPrimaryKey("dbo.Reservations", new[] { "Id", "DeviceId", "CustomerTaxCode" }); 
    } 
} 

Когда я пытаюсь вставить новое резервирование (после обновления базы данных) следующее исключение i сбрасывается:

Невозможно вставить значение NULL в столбец «Id», таблицу «xxxxx.dbo.Reservations»;

Это то, что я вижу в свойствах колонки от дизайнера (Visual Studio 2015):

enter image description here

"Является ли идентичность" еще ложь.

Как я могу это решить?

Заранее спасибо

+0

Вы пытались добавить эти атрибуты в свойство 'Id' в классе' Reservation' вместо [fluent] (https://msdn.microsoft.com/en-us/data/jj591617.aspx) style: '[DataMember, Key, DatabaseGenerated (DatabaseGeneratedOption.Identity)]'. Вы пытались удалить таблицы для отдыха? –

+0

Да, все тот же. Я замечаю, что если я удалю все миграции, воссоздайте один перенос, а затем воссоздав спецификацию идентификатора базы данных, как и ожидалось. Я хотел бы избежать воссоздать базу данных, потому что уже есть производственная версия, и я не буду удалять данные al :(Любое предложение? – Androidian

+0

Вместо перегрузки OnModelCreation попробуйте добавить к ключевому ключу атрибут [Key] и посмотреть, это сработает, что поможет сузить возможные проблемы. – Licht

ответ

4

Вы не можете добавить идентичность к существующему столбцу в SQL Server.

Adding an identity to an existing column

Похожие починка создать новый столбец. Лучшим подходом является добавление нового столбца идентификации, создание переноса для него, а затем удаление старого столбца и создание переноса для него. Таким образом, EF просто попытается переименовать старый столбец.

Смежные вопросы