0
eingefügt werden

Ich versuche, den Primärschlüssel meiner Tabelle als Integer-Autoinkrement-Id zu aktualisieren.EF 6 Code First - Integer-Primärschlüssel - Der Wert NULL kann nicht in die Spalte

Das ist meine Einheit:

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

    ... 
} 

Das ist mein OnModelCreating Methode:

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

     ... 

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

     ... 
    } 

Dies ist die erzeugte Migration:

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" }); 
    } 
} 

Wenn ich versuche, ein einfügen neue Reservierung (nach Update-Datenbank) folgende Ausnahme i s geworfen:

Der Wert NULL kann nicht in die Spalte 'Id' eingefügt werden, Tabelle 'xxxxx.dbo.Reservations';

Dies ist, was ich in der Spalte Eigenschaften von Designern (Visual Studio 2015) zu sehen:

enter image description here

"Ist Identität" ist immer noch falsch.

Wie kann ich das lösen?

Vielen Dank im Voraus

+0

Haben Sie versucht, diese Attribute der 'Id'-Eigenschaft in der' Reservation'-Klasse anstelle von [fließend] hinzuzufügen (https://msdn.microsoft.com/en-us/data/jj591617.aspx) style: '[DataMember, Schlüssel, DatabaseGenerated (DatabaseGeneratedOption.Identity)]'. Haben Sie versucht, die Tabellen zu löschen, um die Erzwingung zu erzwingen? –

+0

Ja, immer noch das Gleiche. Ich stelle fest, dass, wenn ich alle Migrationen lösche, eine einzelne Migration neu erstellt und dann die Datenbank-Identitätsspezifikation wie erwartet neu erstellt wird. Ich möchte vermeiden, die Datenbank neu zu erstellen, weil es bereits eine Produktionsversion gibt und ich werde keine Daten löschen :(Irgendwelche Vorschläge? – Androidian

+0

Anstatt OnModelCreation zu überlasten, versuchen Sie bitte, das [Key] Attribut zu Ihrem Primärschlüssel hinzuzufügen und zu sehen Das hilft, die möglichen Probleme einzugrenzen. – Licht

Antwort

4

Sie nicht eine Identität zu einer vorhandenen Spalte in SQL Server hinzufügen kann.

Adding an identity to an existing column

vorgeschlagene Lösung ist eine neue Spalte zu erstellen. Der beste Ansatz besteht darin, eine neue Identitätsspalte hinzuzufügen, eine Migration für sie zu erstellen, dann die alte Spalte zu entfernen und eine Migration dafür zu erstellen. Auf diese Weise wird EF nicht nur versuchen, die alte Spalte umzubenennen.

Verwandte Themen