.net - término - enable migrations no se reconoce como nombre de un cmdlet
El modelo que respalda el contexto ''ApplicationDbContext'' ha cambiado desde que se creó la base de datos (15)
Acabo de resolver un problema similar al eliminar todos los archivos en la carpeta del sitio web y luego republicarlo.
En primer lugar, no he visto este error en ningún otro lado y supongo que no es una réplica, así que lea primero la situación completa
Todo estaba funcionando bien, intenté actualizar una de mis clases modelo (la clase de la aplicación y la actualización ahora se deja comentada) que voy a enumerar a continuación y auge tuve este feo error.
El modelo que respalda el contexto ''ApplicationDbContext'' ha cambiado desde que se creó la base de datos. Considere usar Code First Migrations para actualizar la base de datos ( http://go.microsoft.com/fwlink/?LinkId=238269 ). en System.Data.Entity.CreateDatabaseIfNotExists 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf
1.b_ e () en System.Data.Entity.Internal.InternalContext.PerformInitializationAction (Acción de acción ) en System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization () en System.Data.Entity.Internal.LazyInternalContext.b _4 (InternalContext c) en System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action
1 acción) en System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase () en System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (Type entityType) en System.Data .Entity.Internal.Linq.InternalSet 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet
1.Include (String path) en System.Data.Entity.Infrastructure.DbQuery 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable
1 fuente, Ruta de cadena) en System.Data.Entity.QueryableExtensions.Include [T, TProperty] (IQueryable 1 source, Expression
1 path) en Microsoft.AspNet.Identity.EntityFramework.UserStore 6.GetUserAggregateAsync(Expression
1 filter) en Microsoft.AspNet.Identity.EntityFramework.UserStore 6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager
2.FindByNameAsync (String userName) en Microsoft.AspNet.Identity.UserManager`2.d_ 12.MoveNext () - - Fin del seguimiento de la pila desde la ubicación anterior donde se lanzó la excepción --- en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Tarea de tarea) en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Tarea de tarea) en ControlPanel.Web.Controllers. AccountController.d _2.MoveNext () en d: / Projects / FULL / Panel de control / ControlPanel.Web / Controllers / AccountController.cs: línea 56
Al principio pensé que podría tratarse de un problema de migraciones, así que dejé la base de datos completamente, volví a habilitar las migraciones, agregué una migración Init y actualicé la base de datos usando
update-database -force -verbose
todo va bien, no tengo quejas, sin embargo cada vez que trato de iniciar sesión en mi sitio recibo el error anterior. Hice lo de la migración unas diez veces sin poder resolver el problema.
aquí están mis clases de dominio (modelos):
public class App { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual int AppId { get; set; } //[Required] public virtual string FacebookId { get; set; } //[Required] public virtual string Secret { get; set; } public virtual List<User> Users { get; set; } public virtual List<Post> Posts { get; set; } //public virtual ApplicationUser Admin { get; set; } } public class Post { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual int PostId { get; set; } public virtual string Content { get; set; } public virtual string Link { get; set; } public virtual string Image { get; set; } public virtual bool IsSpecial { get; set; } //[Required] public virtual App App { get; set; } //[Required] public virtual DateTime? PublishDate { get; set; } }
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int UserId { get; set; }
[MaxLength(500)]
public virtual string FacebookId { get; set; }
[MaxLength(500)]
public virtual string Token { get; set; }
//[Required]
public virtual App App { get; set; }
}
aquí están mis IdentityModels:
public class ApplicationUser : IdentityUser { public virtual List<App> Apps { get; set; } public bool? IsPremium { get; set; } [DataType(DataType.Date)] public DateTime? LastPublishDateTime { get; set; } } public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("dCon") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<IdentityUser>().ToTable("Admins"); modelBuilder.Entity<ApplicationUser>().ToTable("Admins"); modelBuilder.Entity<IdentityUserRole>().ToTable("AdminRoles"); modelBuilder.Entity<IdentityUserLogin>().ToTable("Logins"); modelBuilder.Entity<IdentityUserClaim>().ToTable("Claims"); modelBuilder.Entity<IdentityRole>().ToTable("Roles"); } }
Cuando estoy desarrollando, prefiero usar esta clase práctica para configurar migraciones.
Espero eso ayude.
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
this.Configuration.LazyLoadingEnabled = false;
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
Database.SetInitializer(new Initializer());
}
public class Initializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{
public Initializer()
{
// TODO NOTHING, COMMENT ALL
// IF CHANGES, RECREATE
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ApplicationDbContext>());
// CREATE ONLY NOT EXITS
//Database.SetInitializer<Context>(new CreateDatabaseIfNotExists<ApplicationDbContext>());
}
}
public System.Data.Entity.DbSet<.Models.Company> Companies { get; set; }
}
Eliminar filas en la tabla [__MigrationHistory] con ProductVersion anterior funcionó para mí. Esta respuesta es para aquellos que no desean eliminar toda la tabla [__MigrationHistory]. Simplemente elimine las filas con una versión anterior en ProductVersion Column. Espero que ayude a alguien!
Elimine el archivo db existente, cree un archivo db nuevo con el mismo nombre, copie todos los datos ... funcionará
Elimine la tabla "[__MigrationHistory]" de su "base de datos> tablas de sistema" Funcionará bien.
En el menú Herramientas, haga clic en NuGet Package Manger, luego haga clic en Package Manager Console (PMC). Ingrese los siguientes comandos en el PMC.
Enable-Migrations Add-Migration Init Update-Database Ejecuta la aplicación. La solución al problema es de aquí
Esta post solucionó mi problema. Se trata de agregar la siguiente línea en Application_Start()
en Global.asax
:
Database.SetInitializer<Models.YourDbContext>(null);
Sin embargo, causa recreación de la base de datos para cada edición en su modelo y puede perder sus datos.
Estaba teniendo el mismo problema que a7madx7, pero con la versión estable de EF (v6.1.1), y encontré la resolución publicada en:
con variación en: http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3
El segundo enlace incluye una mención específica para VB ..... "puedes simplemente agregar todo el contexto de la base de datos que está teniendo este problema en tu método app_start en el archivo global.asax como este" :
Database.SetInitializer(Of DatabaseContext)(Nothing)
NB: tuve que reemplazar "DatabaseContext" con el nombre de mi clase implementando DbContext
Actualización: Además, cuando se usa el enfoque codefirst para conectarse a las tablas existentes, verifique la base de datos para ver si EF ha creado una tabla "_migrationhistory" para almacenar las asignaciones. Cambié el nombre de esta tabla y pude eliminar SetInitializer de global.asax.
Esto funcionó para mí, no se requieren otros cambios.
DELETE FROM [dbo].[__MigrationHistory]
Esto puede suceder cuando cambia la anotación de datos de una propiedad de modelo. por ejemplo: agregar [Requerido] a una propiedad causará un cambio pendiente en el diseño de la base de datos.
La solución más segura es ejecutar en la consola de Package Manager:
add-migration myMirgrationName
que mostrará los cambios exactos en el método Up (). Por lo tanto, puede decidir si realmente desea aplicar dichos cambios a través de:
update-database
De lo contrario, puede eliminar la última migración de la tabla __MigrationHistory y de la carpeta Migrations, el Explorador de soluciones.
Fue un error tan extraño, no fue mi error al final, fue de Microsoft, instalé el marco de la Entidad la versión de "prelanzamiento" y fue responsable de este error, cuando me actualicé al establo lanzarlo decepcionado, gracias a todos, créanme cuando hice esta pregunta, busqué alrededor de una semana para su solución, así que estoy bastante seguro de que este problema no está en otro lado: la versión de entity framework.dll que causó la el problema era 6.0.2 si ayuda.
Pasé muchos días para resolver este problema, analicé muchas publicaciones diferentes e intenté muchas opciones, y finalmente lo solucioné. Este 2 proyectos en mi solución utilizando el código EF primeras migraciones:
- Aplicación de consola "DataModel" que utiliza principalmente como ensamblador que contiene todas mis primeras entidades de código, DbContext, Mirgations y repositorio genérico. He incluido en este proyecto un archivo de base de datos local vacío separado (en la carpeta DataModel / App_Data) para poder generar migraciones desde la consola del Administrador de paquetes.
- WebApi, que hace referencia al proyecto de DataModel y utiliza un archivo de base de datos local de la carpeta WebApi / App_Data, que no está incluido en el proyecto
Recibí este error cuando solicité WebApi ...
Mi entorno:
- Windows 8.1 x64
- Visual Studio 2015 Professional con la actualización 1
- todos mis proyectos apuntados para .NET Framework 4.6.1
- EntityFramework 6.1.3 de NuGet
Aquí recogí todos los comentarios que debe prestar atención y todas las condiciones / requisitos que deben cumplirse, para evitar la excepción mencionada:
- Debe usar solo una versión del paquete EntityFramework Nuget para todos los proyectos en su solución.
- La base de datos, creada al ejecutar de forma secuencial todos los scripts de migración, debe tener la misma estructura / esquema que la base de datos de destino y corresponde al modelo de entidad. Después de 3 cosas deben exactamente corresponderse / reflejarse / combinarse entre sí:
- Tu script de migración hasta el final
- Código actual primer estado del modelo de entidad (DbContext, entidades)
- Base de datos objetivo
- La base de datos de destino (archivo mdf) se debe actualizar / corresponder al último script de migración. Verifique que la tabla "__MigrationHistory" en su base de datos de destino contenga registros para todos los scripts de migración que tenga, esto significa que todos los scripts de migración se aplicaron con éxito a esa base de datos. Te recomiendo usar Visual Studio para generar el código correcto de las primeras entidades y el contexto que corresponde a tu base de datos, Proyecto -> Agregar nuevo elemento -> Modelo de datos de entidad ADO.NET -> Código primero de la base de datos: Por supuesto, como alternativa, si no tiene una base de datos, puede escribir el modelo manualmente (codificar las primeras entidades y el contexto) y luego generar la migración inicial y la base de datos.
Nombre de la cadena de conexión, p . Ej. MyConnectionString en el archivo de configuración del proyecto de inicio (Web.config / App.config):
<configuration> <connectionStrings> <add name="MyConnectionString" connectionString="..."> </connectionStrings> <configuration>
debe ser igual al parámetro pasado en el constructor de su DbContext:
public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ...
- Antes de usar la consola de Package Manager , asegúrese de estar utilizando la base de datos correcta para actualizar o generar la migración, y el proyecto necesario se configura como el proyecto de inicio de la solución. Para conectarse a la base de datos, utilizará la cadena de conexión de ese archivo .config, que en el proyecto se configura como proyecto de inicio.
Y el principal, que solucionó mi problema: es raro, pero en mi carpeta WebApi / bin DataModel.exe era viejo, no actualizado desde la última compilación. Como las migraciones estaban incorporadas en mi ensamblado DataModel.exe, mi base de datos actualizada de WebApi usaba mirrors antiguas. Me confundí por qué después de actualizar la base de datos en WebApi no corresponde al último script de migración de DataModel. El siguiente código crea automáticamente (si no existe) o actualizaciones a la última base de datos local de migración en mi carpeta WebApi / App_Data.
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); ...
Intenté limpiar y reconstruir la solución, pero no sirvió de nada, entonces eliminé por completo las carpetas bin y obj de WebApi, borré los archivos de base de datos de WebApi / App_Data, construí, reinicié WebApi, hice una solicitud, creó la base de datos correcta: inicialización lenta (usando líneas arriba), que corresponde a la migración más reciente y la excepción no apareció más. Por lo tanto, esto puede solucionar su problema:
- eliminar carpetas bin, obj manualmente de su proyecto de inicio (que genera / actualiza su base de datos)
- construya su proyecto de inicio o mejor limpie y reconstruya toda su solución.
- recree la base de datos iniciando el proyecto (ejecutará las líneas anteriores) o use el comando "update-database" de la consola de Package Manager.
- compruebe manualmente si db generado y __MirgationHistory corresponde al último script de migración.
Solo en caso de que alguien más se tope con esto que estaba haciendo una primera implementación de base de datos como yo.
Hice un cambio extendiendo la clase ApplicationUser
, agregando un nuevo campo a la tabla AspNetUsers
, y luego tuve este error al iniciar.
Pude resolver esto borrando el registro creado en la tabla __MigrationHistory
(solo había un registro allí). Asumo que EF decidió que necesitaba actualizar mi base de datos usando la herramienta de migración, pero ya lo había hecho yo mismo.
Todo el mundo tiene un dolor de cabeza por este error: asegúrese de que todos sus proyectos tengan una referencia al mismo ensamblaje de Entity Framework.
Cuento largo:
Mi modelo y mi aplicación se encontraban en diferentes ensamblajes. Estas asambleas estaban haciendo referencia a una versión diferente del marco de la Entidad. Supongo que las dos versiones generaron una identificación diferente para el mismo modelo. Entonces, cuando mi aplicación se ejecutó, la identificación del modelo no coincidía con la de la migración más reciente en __MigrationHistory. Después de actualizar todas las referencias a la última versión de EF, el error nunca volvió a aparecer.
eliminar todas las tablas de identidad
Delete _MigrationHistory
Delete AspNetRoles
Delete AspNetUserClaims
Delete AspNetUserLogins
Delete AspNetRoles
Delete AspNetUser