En primer lugar, no he visto este error en ningún otro lugar y supongo que no es una réplica, así que primero lea la situación completa.
Todo estaba funcionando bien, entonces traté de actualizar una de mis clases de modelo (la clase App y la actualización ahora están comentadas) que enumeraré a continuación; y boom 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.EntityInitialization () en System.Data.Entity.Action Internal.LazyInternalContext.b__4 (InternalContext c) en System.Data.Entity.Internal.RetryAction1.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.GetEntitySetFornd entityType) en System.Data.Entity.Internal.Linq.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet
1.Incluya (ruta de cadena) en System.Data.Entity.Infrastructure.DbQuery1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable
1 fuente, ruta de cadena) en System.Data.Entity.QueryableExtensions.Include [T, TProperty] (1 source, Expression
ruta IQueryable 1) en Microsoft.AspNet.Identity. EntityFramework.UserStore6.GetUserAggregateAsync(Expression
1 filtro) en Microsoft.AspNet.Identity.EntityFramework.UserStore6.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ó una excepción --- en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tarea de tarea) en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarea) en ControlPanel.Web.Controllers.AccountController.d : \ Projects \ FULL \ Control Panel \ ControlPanel.Web \ Controllers \ AccountController.cs: línea 56
Al principio pensé que podría ser un problema de migraciones, así que eliminé la base de datos por completo, volví a habilitar las migraciones, agregué una migración de inicio y actualicé la base de datos usando
update-database -force -verbose
Todo va bien sin quejas, sin embargo, cada vez que intento iniciar sesión en mi sitio aparece el error anterior. Hice 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");
}
}
Respuestas:
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 al extender la
ApplicationUser
clase, agregar un nuevo campo a laAspNetUsers
tabla y luego tuve este error al iniciar.Pude resolver esto eliminando el registro creado en la
__MigrationHistory
tabla (solo había un registro allí) Supongo que EF decidió que necesitaba actualizar mi base de datos utilizando la herramienta de migración, pero ya lo había hecho manualmente.fuente
ApplicationDbContext
Esto funcionó para mí, no se requieren otros cambios.
DELETE FROM [dbo].[__MigrationHistory]
fuente
Esta publicación solucionó mi problema. Se trata de agregar la siguiente línea
Application_Start()
enGlobal.asax
:Database.SetInitializer<Models.YourDbContext>(null);
Sin embargo, causa la recreación de la base de datos para cada edición en su modelo y puede perder sus datos.
fuente
Si elimina la tabla "[__MigrationHistory]" de su "base de datos> Tablas del sistema", funcionará.
fuente
[__MigrationHistory]
tabla, simplemente actualice EDMX mmodel también.Fue un error tan extraño, no fue mi error al final, fue de Microsoft, instalé el marco de la entidad la versión "pre-lanzamiento" y fue responsable de este error, cuando actualicé a estable lanzarlo desapareció, gracias a todos, créanme cuando hice esta pregunta, busqué durante una semana más o menos su solución, así que estoy bastante seguro de que este problema no está en ningún otro lugar: la versión de entity framework.dll que causó el El problema fue 6.0.2 si ayuda.
fuente
Todo el mundo tiene dolor de cabeza por este error: asegúrese de que todos sus proyectos tengan una referencia al mismo ensamblado de Entity Framework.
Cuento largo:
Mi modelo y mi aplicación estaban en diferentes montajes. Estos ensamblados hacían referencia a una versión diferente de Entity framework. Supongo que las dos versiones generaron una identificación diferente para el mismo modelo. Entonces, cuando mi aplicación ejecutó, la identificación del modelo no coincidía con la de la última migración en __MigrationHistory. Después de actualizar todas las referencias a la última versión de EF, el error nunca volvió a aparecer.
fuente
Pasé muchos días para resolver este problema, analicé muchas publicaciones diferentes y probé muchas opciones y finalmente lo solucioné. Estos 2 proyectos en mi solución usando el código EF primeras migraciones:
Recibí este error cuando solicité WebApi ...
Mi entorno:
Aquí recopilé todos los comentarios a los que debe prestar atención y todas las condiciones / requisitos que deben cumplirse, para evitar la excepción mencionada:
Nombre de la cadena de conexión, por ejemplo, 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"){} ...
Y el principal, que solucionó mi problema: es extraño, pero en mi carpeta WebApi / bin, DataModel.exe era antiguo, no se actualizó desde la última compilación. Dado que las migraciones estaban incrustadas en mi ensamblaje DataModel.exe, mi base de datos actualizada de WebApi utilizando duplicaciones antiguas. Estaba confundido por qué después de actualizar la base de datos en WebApi no se corresponde con el último script de migración de DataModel. El siguiente código crea automáticamente (si no existe) o actualiza 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 ayudó, entonces eliminé por completo las carpetas bin y obj de WebApi, eliminé los archivos de base de datos de WebApi / App_Data, construí, reinicié WebApi, hice una solicitud, creó la base de datos correcta - inicialización perezosa (usando líneas arriba), que corresponde a la última migración y la excepción no apareció más. Entonces, esto puede solucionar su problema:
fuente
Esto puede suceder cuando cambia la anotación de datos de una propiedad del modelo. por ejemplo: agregar [Obligatorio] a una propiedad provocará un cambio pendiente en el diseño de la base de datos.
La solución más segura es ejecutarla en Package Manager Console:
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 Migraciones el Explorador de soluciones.
fuente
Tenía el mismo problema que a7madx7, pero con una versión estable de EF (v6.1.1), y encontré una resolución publicada en:
http://cybarlab.com/context-has-changed-since-the-database-was-created
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 ..... "simplemente puede agregar todo el contexto de la base de datos que tiene este problema en su 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, al usar el enfoque de codefirst para conectarse a tablas existentes, verifique la base de datos para ver si EF ha creado una tabla "_migrationhistory" para almacenar asignaciones. Cambié el nombre de esta tabla y luego pude eliminar SetInitializer de global.asax.
fuente
Simplemente elimine el historial de migración en _MigrationHistory en su base de datos. Funcionó para mi
fuente
Acabo de resolver un problema similar eliminando todos los archivos en la carpeta del sitio web y luego lo volví a publicar.
fuente
eliminar la identidad de todas las tablas
Delete _MigrationHistory Delete AspNetRoles Delete AspNetUserClaims Delete AspNetUserLogins Delete AspNetRoles Delete AspNetUser
fuente
En el menú Herramientas, haga clic en Administrador de paquetes NuGet y luego en Consola del administrador de paquetes (PMC). Ingrese los siguientes comandos en el PMC.
Enable-Migrations Add-Migration Init Update-Database Ejecute la aplicación. La solución al problema es de aquí.
fuente
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 StackOverflowInitializer()); } public class StackOverflowInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext> { public StackOverflowInitializer() { // 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<stackoverflow.Models.Company> Companies { get; set; } }
fuente
Eliminar filas en la tabla [__MigrationHistory] con la versión anterior del producto funcionó para mí. Esta respuesta es para aquellos que no quieren eliminar la tabla [__MigrationHistory] completa. Simplemente elimine las filas con la versión anterior en la columna ProductVersion. ¡Espero que ayude a alguien!
fuente
A continuación se muestra el tipo de error similar que encontré
El modelo que respalda el contexto 'PsnlContext' 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 ).
Agregué la siguiente sección en el evento Application Start de Global.asax para resolver el error
Database.SetInitializer (nulo);
Esto solucionó el problema
fuente
simplemente el error significa que sus modelos tienen cambios y no están sincronizados con DB, así que vaya a la consola del administrador de paquetes,
add-migration foo2
esto le dará una pista de lo que está causando el problema, puede que haya eliminado algo o, en mi caso, elimino una anotación de datos . desde allí puede obtener el cambio y, con suerte, revertirlo en su modelo.después de eso, elimine foo2.
fuente
Sé que llego muy tarde, pero también quiero contribuir. Este error es realmente extraño, porque el navegador no puede entender cómo se deben representar los cambios porque las clases y sus propiedades pueden haber cambiado pero no se han comprometido con la base de datos.
Así que haz una cosa
cree una migración en la Consola del Administrador de paquetes (Herramientas> Administrador de paquetes NuGet> Consola del Administrador de paquetes) usando este comando:
donde UpdateMigration es el nombre de su migración. Puede darle el nombre que desee, pero sea específico.
Después de eso, solo necesitamos actualizar la base de datos, así que ejecuta esto:
Ahora que ha confirmado sus cambios en la base de datos, simplemente actualice su navegador y listo.
Espero que esto ayude.
fuente
esto se debe a que agregaste alguna propiedad a uno de tus modelos y no lo hiciste
update-Database
. para solucionar esto tienes que quitarlo del modelo o tienes que hacerloadd-migration anyProperName
con esas propiedades yUpdate-database
.fuente
Se me ocurrió este error cuando hice cambios en mi modelo y no realicé la migración para que los cambios actualizaran la base de datos.
Si alguna vez ha realizado cambios en su modelo en Code First Migration Schema
No olvide agregar la migración
add-migration UpdatesToModelProperites
El comando anterior leerá todos los cambios que ha realizado en el modelo y los escribirá en los métodos Up () y Down ().
Luego, simplemente actualice su base de datos usando el siguiente comando.
update-database
Esto es lo que funcionó para mí.
fuente
Elimine la base de datos existente, cree una nueva base de datos con el mismo nombre, copie todos los datos ... funcionará
fuente