J'ai une classe d'entité
public class Employee
{
public long Id { get; set; }
public string Name { get; set; }
}
J'ai défini le champ Id comme clé primaire avec génération automatique de numéros
modelBuilder.Entity<Employee>().HasKey(e => e.Id);
modelBuilder.Entity<Employee>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Mais je veux que l'identité commence à partir de 10 000 au lieu de 1, valeur par défaut. Comment puis-je spécifier cela dans EF?
Si vous utilisez SQL Server, vous devez créer un initialiseur de base de données personnalisé et exécuter manuellement DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)
. Pour créer et utiliser un initialiseur personnalisé avec des commandes SQL personnalisées, vérifiez cette réponse .
Sur la base de la réponse de Ladislav Mrnka, vous pouvez ajouter ceci dans votre méthode de fichier de migration Up
:
Sql("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)");
Vous pouvez sans aucun doute obtenir le même résultat que la valeur initiale 1000, en exécutant le script "DBCC CHECKIDENT (" TableName ", RESEED, NewSeedValue)" à partir de la méthode de script de migration Up.
Toutefois, la définition de la table dans SQL Server indique toujours "IDENTITY (1,1)" même si le premier enregistrement entré dans la table reçoit un identifiant 1000. Cela signifie que le germe d'identité de la table n'a pas été défini sur 1000. Les valeurs 999 initiales sont simplement consommées ou ignorées lors de la création du premier enregistrement, bien sûr parce que vous lancez la commande RESEED sur la base de données, c'est-à-dire que vous modifiez le SEED déjà défini.
Pour conclure, il semblerait que dans EF Core v2.1, Microsoft n’ait pas prévu de personnaliser la valeur d’origine de la graine d’identité lors de la création de la table. Espérons que les futures versions d'EF Core, probablement 2.2 ou 3.0, auront cette fonctionnalité. Thoughts ...?
sur la base de @ ehsan88, vous pouvez créer une classe d'initialisation de base de données
public class AccDatabaseInitializer : CreateDatabaseIfNotExists<YourContect>
{
protected override void Seed(YourContect context)
{
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)");
context.SaveChanges();
}
}
merci