Tenemos la mejor solución que descubrimos online. Queremos que te sirva de ayuda y si deseas comentarnos cualquier detalle que nos pueda ayudar a crecer puedes hacerlo..
Solución:
parece que hay un problema en el proceso de migración, ejecute el comando add-migration en la “Consola del administrador de paquetes”:
Add-Migration Initial -IgnoreChanges
haga algunos cambios y luego actualice la base de datos desde el archivo “Inicial”:
Actualizar-base de datos -verbose
Editar:
-IgnoreChanges está en EF6 pero no en EF Core, aquí hay una solución alternativa: https://stackoverflow.com/a/43687656/495455
¡Tal vez haya cambiado el espacio de nombres en su proyecto!
Hay una tabla en su base de datos llamada dbo.__MigrationHistory
. La tabla tiene una columna llamada ContextKey
.
El valor de esta columna se basa en su namespace
. por ejemplo es “DataAccess.Migrations.Configuration
“.
Cuando cambia el espacio de nombres, provoca nombres de tablas duplicados con diferentes espacios de nombres.
Entonces, después de cambiar el espacio de nombres en el lado del código, cambie también el espacio de nombres en esta tabla en la base de datos (para todas las filas).
Por ejemplo, si cambia el espacio de nombres a EFDataAccess
entonces debe cambiar los valores de ContextKey
columna en dbo.__MigrationHistory
a “EFDataAccess.Migrations.Configuration
“.
Luego, en el lado del código, en Herramientas => Consola del administrador de paquetes, use el update-database
dominio.
Otra opción en lugar de cambiar el valor de contexto en la base de datos es codificar el valor de contexto en su código al valor del espacio de nombres anterior. Esto es posible al heredar DbMigrationsConfiguration
y en el constructor simplemente asigne el valor de contexto anterior a ContextKey
que heredar de MigrateDatabaseToLatestVersion
y deja esa clase vacía. Lo último que debe hacer es llamar. Database.SetInitializer(new YourDbInitializer());
en su DbContext en un static constructor.
Espero que tu problema se solucione.
“Ya existe un objeto llamado ‘AboutUs’ en la base de datos”.
Esta excepción le dice que alguien ya ha agregado un objeto llamado ‘AboutUs’ a la base de datos.
AutomaticMigrationsEnabled = true;
puede conducir a ello ya que las versiones de la base de datos no están controladas por usted en este caso. Para evitar migraciones impredecibles y asegurarse de que todos los desarrolladores del equipo trabajen con la misma estructura de base de datos te sugiero que establezcas AutomaticMigrationsEnabled = false;
.
Las migraciones automáticas y las migraciones codificadas pueden coexistir si tiene mucho cuidado y es el único desarrollador en un proyecto.
Hay una cita de la publicación Migraciones automáticas de Code First en el Centro de desarrolladores de datos:
Las migraciones automáticas le permiten usar las migraciones de Code First sin tener un archivo de código en su proyecto para cada cambio que realice. No todos los cambios se pueden aplicar automáticamente; por ejemplo, los cambios de nombre de columna requieren el uso de una migración basada en código.
Recomendación para entornos de equipo
Puede intercalar migraciones automáticas y basadas en código, pero esto no se recomienda en escenarios de desarrollo en equipo. Si forma parte de un equipo de desarrolladores que utiliza el control de código fuente, debe utilizar migraciones puramente automáticas o migraciones puramente basadas en código. Dadas las limitaciones de las migraciones automáticas, recomendamos usar migraciones basadas en código en entornos de equipo.