tutorial net mvc framework first example español data code asp c# sql-server ef-code-first entity-framework-6

c# - net - Código de Entity Framework 6 First int El valor de la columna de identidad es cero para la primera fila



entity framework tutorial español (1)

Su clase de migración concreta debe verse como "algo" como el siguiente:

public class 201707132034165_MyAwesomeDbInitial : DbMigration { #region <Methods> public override void Up() { CreateTable( "dbo.HasOverdrive", c => new { HasOverdriveId = c.Int(nullable: false, identity: true), HasOverdriveValue = c.String(nullable: false, maxLength: 5) }) .PrimaryKey(t => t.HasOverdriveId) .Index(t => t.HasOverdriveValue, unique: true, name: "UX_HasOverdrive_AlternateKey"); } // This should is called by your DbConfiguration class public void Seed(MyAwesomeDbContext context) { // DO THIS FIRST !!!!!!!!!!!!!!! context.Database.ExecuteSqlCommand("DBCC CHECKIDENT (''HasOverdrive'', RESEED, 0)"); // LOOKUPS SeedHasOverdrive(context); } private void SeedHasOverdrive(MeasurementContractsDbContext context) { context.HasOverdrive.AddOrUpdate ( m => m.Id, new HasOverdrive { HasOverdriveId = 0, HasOverdriveValue = "No" }, // 0 = FALSE new HasOverdrive { HasOverdriveId = 1, HasOverdriveValue = "Yes" } // 1 = TRUE ); } #endregion }

Después de la primera ejecución del comando update-database para rellenar la base de datos con datos de inicialización:

Se encontró que todas las columnas int Id comenzaron con cero (0) en lugar del esperado (1).

Se agregaron las siguientes 2 líneas de código para cada entidad / tabla a la parte superior del método Seed en Configuration.cs:

[Nota: debido a las restricciones de clave externa, eliminé todas las filas en las tablas de descendientes, y luego me abrí paso por la cadena ancestral.]

context.Database.ExecuteSqlCommand("delete from Widgets"); context.Database.ExecuteSqlCommand("DBCC CHECKIDENT (''Widgets'', RESEED, 0)");

Luego, volví a actualizar la base de datos, y todas las columnas ID int comenzaron con uno (1).

Si elimino la base de datos, ejecuto / agrego la migración inicial y luego ejecuto update-database, todas las columnas int Id comienzan con cero (0).

Es como si las DBCC CHECKIDENT (''Widgets'', RESEED, 0) no se ejecutaran la primera vez que se ejecuta el método Seed.

Además, si no hay datos iniciales para una entidad / tabla, no importa cuántas veces se ejecute el comando update-database, la primera vez que se agrega una fila a la tabla vacía, Id será cero (0).

Posiblemente, ¿hay alguna manera de especificar el valor de inicialización para las columnas de identidad int en el método de OnModelCreating de IdentityModels.cs ?

Actualizar:

  1. DBCC CHECKIDENT (''Table'', RESEED, 0) : DBCC CHECKIDENT (''Table'', RESEED, 0) a DBCC CHECKIDENT (''Table'', RESEED, 1) en Configuration.cs.

  2. Eliminado la base de datos.

  3. Ejecutado: update-database -TargetMigration Initial (El resultado es todo int Ides begin with 1.)

  4. Ejecución update-database para restablecer la base de datos. (El resultado es que todos los int Ids comienzan con 2, sin importar cuántas veces ejecute la update-database ).