c# - secundaria - la educación física y su didáctica
Código EF primero: ¿cómo establecer la semilla de identidad? (4)
Basándose en la respuesta de Ladislav Mrnka, puede agregar esto en su método de subida de archivos de migración:
Sql("DBCC CHECKIDENT (''TableName'', RESEED, NewSeedValue)");
Tengo una clase de entidad
public class Employee
{
public long Id { get; set; }
public string Name { get; set; }
}
He establecido el campo Id como la clave principal con la generación automática de números
modelBuilder.Entity<Employee>().HasKey(e => e.Id);
modelBuilder.Entity<Employee>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Pero quiero que la identidad se inicie desde 10000 en lugar de desde 1, que es el valor predeterminado. ¿Cómo puedo especificar esto en EF?
Definitivamente, puede lograr el mismo resultado que la semilla de identidad siendo 1000 ejecutando el script "DBCC CHECKIDENT (''TableName'', RESEED, NewSeedValue)" desde el método Up del script de migración.
Sin embargo, la definición de la tabla en SQL Server todavía muestra "IDENTIDAD (1,1)" aunque el primer registro ingresado en la tabla obtiene un ID 1000. Esto significa que la semilla de identidad de la tabla no se ha establecido en 1000. Es solo que los valores iniciales de 999 se consumen o se omiten al crear el primer registro, por supuesto, porque está disparando el comando RESEED al DB, es decir, está cambiando el SEED que ya se ha establecido.
Para concluir, parece que, en EF core v2.1, Microsoft no ha proporcionado la posibilidad de personalizar el valor de semilla de identidad al crear la tabla. Esperemos que las futuras versiones de EF Core, probablemente 2.2 o 3.0 tengan esta característica. Pensamientos ...?
Si está utilizando SQL Server, debe crear un inicializador de base de datos personalizado y ejecutar manualmente DBCC CHECKIDENT (''TableName'', RESEED, NewSeedValue)
. Para crear y usar un inicializador personalizado con comandos SQL personalizados, verifique esta respuesta .
basado en @ ehsan88 puedes hacer una clase de Base de Datos Inicializar
public class AccDatabaseInitializer : CreateDatabaseIfNotExists<YourContect>
{
protected override void Seed(YourContect context)
{
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT (''TableName'', RESEED, NewSeedValue)");
context.SaveChanges();
}
}
Gracias