working visual the studio remove migrations initial framework found first existing enable current code change entity-framework ef-migrations

entity-framework - visual - remove migration entity framework core



Primer código de Entity Framework: la migración falla con la base de datos de actualización, fuerzas innecesarias(?) Add-migration (3)

También traté de borrar la base de datos de nuevo, llamé update-database y luego add-migration. Terminé con una migración adicional que parece no cambiar nada (ver más abajo)

En base a los detalles anteriores, creo que has hecho lo último antes. Si ejecuta la Update database antes Add-migration , no actualizará la base de datos con sus esquemas de migración. Primero necesita agregar la migración y luego ejecutar el comando de actualización.

Pruébalos en este orden usando la consola del administrador de paquetes.

PM> Enable-migrations //You don''t need this as you have already done it PM> Add-migration Give_it_a_name PM> Update-database

Tengo un efecto divertido al utilizar la migración (EF 5.0) y el primer código:

Creé algunos modelos con claves principales GUID. (Por cierto: es importante para mí que SQL Server use NEWSEQUENTIALID() , que parece ser el valor predeterminado en la versión actual)

En algún momento activé las migraciones. .Index() un código a la migración inicial, esto es principalmente .Index() según sea necesario.

Cuando elimino la base de datos y llamo a la base de datos de actualización, aparece el siguiente error:

No se puede actualizar la base de datos para que coincida con el modelo actual porque hay cambios pendientes y la migración automática está deshabilitada. Escriba los cambios del modelo pendientes en una migración basada en código o habilite la migración automática. Establezca DbMigrationsConfiguration.AutomaticMigrationsEnabled en true para habilitar la migración automática. Puede usar el comando Agregar-Migración para escribir los cambios del modelo pendiente en una migración basada en código.

Intenté AutomaticMigrationsEnabled = true , que funcionó sin cambiar ni agregar nada.

Pero dado que no quiero AutomaticMigrationsEnabled , también traté de eliminar la base de datos de nuevo, llamada update-database y luego add-migration . Terminé con una migración adicional que parece no cambiar nada (ver más abajo). También traté de agregar estas líneas al final de la migración inicial, pero esto no cambia nada.

Uno de los modelos:

[Table(Speaker.TABLENAME)] public class Speaker : BaseModel { public const String TABLENAME = "Speaker"; [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; } [Required] [MaxLength(50, ErrorMessage = "Name must be 50 characters or less")] public string Name { get; set; } }

El código de migración inicial:

public partial class InitialCreate : DbMigration { public override void Up() { // [...] CreateTable( "dbo.Speaker", c => new { Id = c.Guid(nullable: false, identity: true), Name = c.String(nullable: false, maxLength: 50), }) .PrimaryKey(t => t.Id) .Index(t => t.Name, true, false); // added manually: unique Name // [...] } } internal sealed class Configuration : DbMigrationsConfiguration<MyProject.Repositories.DBContext> { public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(MyProject.Repositories.DBContext context) { // ... } }

A continuación se muestra el código creado por add-migration: Parece que no hace nada nuevo, ¿quizás me falta algo?

public partial class UnneccessaryMigration : DbMigration { public override void Up() { // isn''t this the exact same code from InitialMigrations? AlterColumn("dbo.Speaker", "Id", c => c.Guid(nullable: false, identity: true)); // ... } public override void Down() { //... AlterColumn("dbo.Speaker", "Id", c => c.Guid(nullable: false)); } }

Entonces, tengo curiosidad: ¿qué hice para desorientar las migraciones? ¿Y qué puedo hacer para que funcione con solo una migración inicial?

Solución : la siguiente solución lo hizo por mí:

  1. Eliminé la base de datos y todas las migraciones descritas aquí: https://stackoverflow.com/a/11679386/3168401
  2. Ejecutado Enable-Migrations + Add-Migration Initial
  3. Fusioné mi archivo .Index () hecho a mano en el archivo. Ahora la base de datos de actualización funciona nuevamente, también repetidamente, al eliminar la base de datos.

Entity Framework tiene algunos problemas con los campos de identidad.

No puede agregar identidad de GUID en la tabla existente

Migraciones: no detecta cambios en DatabaseGeneratedOption

La ingeniería inversa no marca claves GUID con NEWSEQUENTIALID () predeterminado como identidades generadas por la tienda

Ninguno de estos describe su problema exactamente y el método Down () en su migración extra es interesante porque parece estar intentando eliminar IDENTIDAD de la columna cuando aparece CREATE TABLE en la migración inicial para configurarlo.

Además, si utiliza Update-Database -Script o Update-Database -Verbose para ver el sql que se ejecuta desde estos métodos AlterColumn verá que el sql es idéntico en Up y Down , y en realidad no hace nada. IDENTITY permanece sin cambios (para la versión actual - EF 6.0.2 y abajo) - como se describe en los primeros 2 números con los que me he vinculado.

Creo que deberías eliminar el código redundante en tu migración adicional y vivir con una migración vacía por ahora. Y podría suscribirse / votar por los problemas que se abordarán.

Referencias

Cambiar la opción IDENTIDAD does didly squat

Activar / desactivar la identidad con una operación de migración personalizada


Prueba esto:

PM> Enable-migrations -force PM> Add-migration MigrationName PM> Update-database -force