Tout d'abord, je n'ai vu cette erreur nulle part ailleurs et je suppose que ce n'est pas une réplique, alors veuillez d'abord lire toute la situation.
Tout fonctionnait très bien alors j'ai essayé de mettre à jour l'une de mes classes de modèle (la classe App et la mise à jour sont maintenant commentées) que je vais lister ci-dessous; et boum j'ai eu cette horrible erreur.
Le modèle supportant le contexte 'ApplicationDbContext' a changé depuis la création de la base de données. Pensez à utiliser les migrations Code First pour mettre à jour la base de données ( http://go.microsoft.com/fwlink/?LinkId=238269 ). à System.Data.Entity.CreateDatabaseIfNotExists
1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf
1.b__e () à System.Data.Entity.Internal.InternalContext.PerformInitializationAction (action d'action) à System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization () à System.Data.Entity. Internal.LazyInternalContext.b__4 (InternalContext c) à System.Data.Entity.Internal.RetryAction1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action
1 action) à System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase () à System.Data.Entity.Internal.InternalContext.GetEntityTypeForType entityType) à System.Data.Entity.Internal.Linq.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet
1.Include (String path) at System.Data.Entity.Infrastructure.DbQuery1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable
1 source, String path) at System.Data.Entity.QueryableExtensions.Include [T, TProperty] (IQueryable1 source, Expression
1 path) at Microsoft.AspNet.Identity. EntityFramework.UserStore6.GetUserAggregateAsync(Expression
1 filter) sur Microsoft.AspNet.Identity.EntityFramework.UserStore6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager
2.FindByNameAsync (String userName) sur Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext () --- Fin de la trace de pile à partir de l'emplacement précédent où exception a été levée --- à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche de tâche) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche de tâche) à ControlPanel.Web.Controllers.Account dans ControlPanel.Web. : \ Projects \ FULL \ Control Panel \ ControlPanel.Web \ Controllers \ AccountController.cs: ligne 56
Au début, je pensais que cela pouvait être un problème de migration, alors j'ai complètement supprimé la base de données, réactivé les migrations, ajouté une migration Init et mis à jour la base de données en utilisant
update-database -force -verbose
Tout se passe bien sans aucune plainte, cependant, chaque fois que j'essaye de me connecter à mon site, j'obtiens l'erreur précédente. J'ai fait la migration une dizaine de fois sans pouvoir résoudre le problème.
Voici mes classes de domaine (modèles):
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; }
}
Here are my 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");
}
}
Réponses:
Just in case anyone else stumbles upon this that was doing a database first implementation like me.
I made a change by extending the
ApplicationUser
class, adding a new field to theAspNetUsers
table, and then had this error on startup.I was able to resolve this by deleting the record created in the
__MigrationHistory
table (there was only one record there) I assume EF decided that I needed to update my database using the migration tool - but I had already done this manually myself.la source
ApplicationDbContext
This worked for me - no other changes required.
DELETE FROM [dbo].[__MigrationHistory]
la source
This post fixed my issue. It's all about adding the following line in
Application_Start()
inGlobal.asax
:Database.SetInitializer<Models.YourDbContext>(null);
However it cause database recreation for every edit in your model and you may loose your data.
la source
If you delete the "[__MigrationHistory]" table from your "database > System Tables" then it will work.
la source
[__MigrationHistory]
table just update EDMX mmodel as well.It was such a strange error,, It wasn't my error at the end, it was Microsoft's,, I installed the Entity framework the " pre-release" version and it was responsible for this error,, when i upgraded to the stable release it disapperared,, thank you everyone believe me when i asked this question i searched like for a week or so for its solution so i am pretty sure that this problem isn't anywhere else : the version of entity framework.dll that caused the problem was 6.0.2 if it helps.
la source
Everybody getting a headache from this error: Make absolutely sure all your projetcs have a reference to the same Entity Framework assembly.
Short story long:
My model and my application were in different assemblies. These assemblies were referencing a different version of Entity framework. I guess that the two versions generated a different id for the same modell. So when my application ran the id of the model didn't match the one of the latest migration in __MigrationHistory. After updating all references to the latest EF release the error never showed up again.
la source
I spent many days to solve this issue, analyzed many different posts and tried many options and finally fixed. This 2 projects in my solution using EF code first migrations:
I got this error when requested WebApi...
My environment:
Here I collected all the remarks you should pay attention and all conditions/requirements which must be met, to avoid mentioned exception :
Name of connection string e.g. MyConnectionString in config file of startup project (Web.config/App.config):
<configuration> <connectionStrings> <add name="MyConnectionString" connectionString="..."> </connectionStrings> <configuration>
should be equal to parameter passed in constructor of your DbContext:
public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ...
And the main, which fixed my issue: It is weird, but in my WebApi/bin folder DataModel.exe was old, not refreshed since last build. Since migrations was embedded in my assembly DataModel.exe then my WebApi updated database using old mirgations. I was confused why after updating database in WebApi it not corresponds to latest migration script from DataModel. Following code automatically creates(if not exists) or updates to latest migration local database in my WebApi/App_Data folder.
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); ...
I tried clean and rebuild solution but it did not help, than I completely removed bin and obj folders from WebApi, deleted database files from WebApi/App_Data, built, restarted WebApi, made request to it, it created correct database - lazy initialization (using lines above), which corresponds to latest migration and exception didn't appear more. So, this may fix your problem:
la source
This can happen when you change the data annotation of a model property. for example: adding [Required] to a property will cause a pending change in the database design.
The safest solution is to run on the Package Manager Console:
add-migration myMirgrationName
which will display the exact changes in the Up() method. Therefore, you can decide if you really want to apply such changes via the:
update-database
Otherwise, you may just delete the latest migration from the __MigrationHistory table and from the Migrations folder the Solution Explorer.
la source
I was having same problem as a7madx7, but with stable release of EF (v6.1.1), and found resolution posted in:
http://cybarlab.com/context-has-changed-since-the-database-was-created
with variation in: http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3
2nd link includes specific mention for VB..... "you can simply add all the databasecontext that are having this problem on your app_start method in the global.asax file like this":
Database.SetInitializer(Of DatabaseContext)(Nothing)
NB: i had to replace "DatabaseContext" with the name of my class implementing DbContext
Update: Also, when using codefirst approach to connect to existing tables, check database to see if EF has created a table "_migrationhistory" to store mappings. I re-named this table then was able to remove SetInitializer from global.asax.
la source
Just Delete the migration History in _MigrationHistory in your DataBase. It worked for me
la source
I just solved a similar problem by deleting all files in the website folder and then republished it.
la source
remove all tables identity
Delete _MigrationHistory Delete AspNetRoles Delete AspNetUserClaims Delete AspNetUserLogins Delete AspNetRoles Delete AspNetUser
la source
From the Tools menu, click NuGet Package Manger, then click Package Manager Console (PMC). Enter the following commands in the PMC.
Enable-Migrations Add-Migration Init Update-Database Run the application. The solution to the problem is from here
la source
When I am developing, I prefer to use this practical class to configure Migrations.
Hope it helps.
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; } }
la source
Deleting Rows in [__MigrationHistory] table with Older productVersion worked for me. This answer is for those who don't want to delete entire [__MigrationHistory] table. Just delete the rows with older version in ProductVersion Column. Hope it helps some one!
la source
Below was the similar kind of error i encountered
The model backing the 'PsnlContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
I added the below section in the Application Start event of the Global.asax to solve the error
Database.SetInitializer (null);
This fixed the issue
la source
simply the error means that your models has changes and is not in Sync with DB ,so go to package manager console ,
add-migration foo2
this will give a hint of what is causing the issue , may be you removed something or in my case I remove a data annotation . from there you can get the change and hopefully reverse it in your model.after that delete foo2 .
la source
I know I am very late, but I want to give contribution too. This error is really strange, because the browser is not able to understand how the changes should be rendered because the classes and their properties might have changed but not committed to the database.
So do one thing,
create one migration in Package Manager Console(Tools > NuGet Package Manager > Package Manager Console) using this command:
where UpdateMigration is the name of your Migration. You can give it any name of your choice but please be specific.
After that, we just need to update the database, so run this:
Now that you have committed your changes to the database, just refresh your browser and there you go!
Hope this helps.
la source
this comes because you add some property to one of your model and you did not
update-Database
. to solve this you have to remove it from model or you have toadd-migration anyProperName
with that properties andUpdate-database
.la source
This error occurred to me when I made changes to my Model and did not make migration for the changes to update the database.
If you have ever made changes to your model in Code First Migration Schema
Don't forget to add migration
add-migration UpdatesToModelProperites
The above command will read all the changes you have made in the model and will write it in the Up() and Down() methods.
Then simply update your database using the below command.
update-database
This what worked for me.
la source
Delete existing db ,create new db with same name , copy all data...it will work
la source