J'essaie de mettre à jour la clé primaire de ma table pour qu'elle soit un entier auto-incrémenté Id.EF 6 Code First - Clé primaire d'entier - Impossible d'insérer la valeur NULL dans la colonne
Ceci est mon entité:
public class Reservation
{
public int Id { get; set; }
public ReservationStatus Status { get; set; }
public string Name { get; set; }
public string CustomerName { get; set; }
...
}
C'est ma méthode OnModelCreating:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
...
modelBuilder.Entity<Reservation>()
.HasKey(e => e.Id)
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
...
}
C'est la migration générée:
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" });
}
}
Lorsque je tente d'insérer un nouvelle réservation (après Update-Database) l'exception suivante i s jeté:
Impossible d'insérer la valeur NULL dans la colonne 'Id', table 'xxxxx.dbo.Reservations';
C'est ce que je vois dans les propriétés de la colonne de concepteur (Visual Studio 2015):
"L'identité" est toujours faux.
Comment puis-je résoudre ce problème?
Merci à l'avance
Avez-vous essayé d'ajouter ces attributs à la propriété 'Id' dans la classe' Reservation' au lieu de [couramment] (https://msdn.microsoft.com/fr-fr/data/jj591617.aspx) style: '[DataMember, Key, DatabaseGenerated (DatabaseGeneratedOption.Identity)]'. Avez-vous essayé de supprimer les tables pour forcer la récréation? –
Oui, toujours la même chose. Je remarque que si je supprime toutes les migrations, recréer une seule migration et ensuite recréer la base de données Identity Specification est comme prévu. Je voudrais éviter de recréer la base de données car il y a déjà une version de production et je ne vais pas effacer toutes les données :(Toute suggestion? – Androidian
Au lieu de surcharger OnModelCreation, essayez d'ajouter l'attribut [Key] à votre clé primaire et voyez si Cela va aider à réduire les problèmes possibles. – Licht