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:
"Ist Identität" ist immer noch falsch.
Wie kann ich das lösen?
Vielen Dank im Voraus
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? –
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
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