Em primeiro lugar, não vi esse erro em nenhum outro lugar e acho que não é uma réplica, então leia primeiro toda a situação.
Tudo estava funcionando bem, então tentei atualizar uma das minhas classes de modelo (a classe App e a atualização agora está comentada), que irei listar abaixo; e boom eu tive esse erro feio.
O modelo que apoia o contexto 'ApplicationDbContext' mudou desde que o banco de dados foi criado. Considere o uso de migrações do Code First para atualizar o banco de dados ( http://go.microsoft.com/fwlink/?LinkId=238269 ). em System.Data.Entity.CreateDatabaseIfNotExists
1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf
1.b__e () em System.Data.Entity.Internal.InternalContext.PerformInitializationAction (Ação de ação) em System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization () em System.Data.Entity. Internal.LazyInternalContext.b__4 (InternalContext c) em System.Data.Entity.Internal.RetryAction1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action
1 action) em System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase () em System.Data.Entity.Internal.InternalContext.GetEntitySet entityType) em System.Data.Entity.Internal.Linq.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet
1.Include (String path) em System.Data.Entity.Infrastructure.DbQuery1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable
1 source, String path) em System.Data.Entity.QueryableExtensions.Include [T, TProperty] (IQueryable1 source, Expression
1 path) em Microsoft.AspNet.Identity.6.GetUserAggregateAsync(Expression
Filtro EntityFramework.UserStore 1) em Microsoft.AspNet.Identity.EntityFramework.UserStore6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager
2.FindByNameAsync (String userName) em Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext () --- Fim do rastreamento de pilha do local anterior onde exceção foi lançada --- em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task task) em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) em ControlPanel.Web.Controllers.Account__trollers.Account__ : \ Projects \ FULL \ Control Panel \ ControlPanel.Web \ Controllers \ AccountController.cs: linha 56
A princípio pensei que poderia ser um problema de migração, então eliminei totalmente o banco de dados, reativei as migrações e adicionei uma migração Init e atualizei o banco de dados usando
update-database -force -verbose
Tudo vai bem sem reclamações, porém sempre que tento entrar no meu site recebo o erro anterior. Fiz a migração umas dez vezes sem conseguir resolver o problema.
Aqui estão minhas classes de domínio (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; }
}
Aqui estão meus 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");
}
}
Respostas:
Apenas no caso de alguém se deparar com isso que estava fazendo uma primeira implementação de banco de dados como eu.
Fiz uma alteração estendendo a
ApplicationUser
classe, adicionando um novo campo àAspNetUsers
tabela e, em seguida, tive esse erro na inicialização.Consegui resolver isso excluindo o registro criado na
__MigrationHistory
tabela (havia apenas um registro lá). Presumo que EF decidiu que precisava atualizar meu banco de dados usando a ferramenta de migração - mas eu mesmo já tinha feito isso manualmente.fonte
ApplicationDbContext
Isso funcionou para mim - nenhuma outra alteração necessária.
DELETE FROM [dbo].[__MigrationHistory]
fonte
Este post corrigiu meu problema. É tudo sobre como adicionar a seguinte linha
Application_Start()
emGlobal.asax
:Database.SetInitializer<Models.YourDbContext>(null);
No entanto, isso causa a recriação do banco de dados para cada edição em seu modelo e você pode perder seus dados.
fonte
Se você excluir a tabela "[__MigrationHistory]" de seu "banco de dados> Tabelas do sistema", ela funcionará.
fonte
[__MigrationHistory]
tabela, basta atualizar o mmodel EDMX também.Foi um erro tão estranho ,, Não foi meu erro no final, foi da Microsoft ,, instalei o Entity framework a versão "pré-lançamento" e foi o responsável por este erro ,, quando atualizei para o estável libere-o desapareceu ,, obrigado a todos, acreditem em mim quando fiz esta pergunta, eu pesquisei por uma semana ou mais por sua solução, então tenho certeza de que esse problema não está em nenhum outro lugar: a versão do entity framework.dll que causou o problema era 6.0.2 se isso ajudar.
fonte
Todo mundo está ficando com dor de cabeça com este erro: Certifique-se de que todos os seus projetos tenham uma referência ao mesmo assembly do Entity Framework.
História curta:
Meu modelo e meu aplicativo estavam em montagens diferentes. Esses assemblies faziam referência a uma versão diferente da estrutura Entity. Acho que as duas versões geraram um id diferente para o mesmo modelo. Portanto, quando meu aplicativo foi executado, o id do modelo não correspondeu ao da última migração em __MigrationHistory. Depois de atualizar todas as referências para o último lançamento da EF, o erro nunca mais apareceu.
fonte
Passei muitos dias resolvendo esse problema, analisei muitos posts diferentes e tentei muitas opções e finalmente resolvi. Este 2 projetos em minha solução usando migrações de código EF primeiro:
Recebi este erro quando solicitou WebApi ...
Meu ambiente:
Coletei aqui todas as observações que você deve prestar atenção e todas as condições / requisitos que devem ser atendidos, para evitar a exceção mencionada:
Nome da string de conexão, por exemplo, MyConnectionString no arquivo de configuração do projeto de inicialização (Web.config / App.config):
<configuration> <connectionStrings> <add name="MyConnectionString" connectionString="..."> </connectionStrings> <configuration>
deve ser igual ao parâmetro passado no construtor do seu DbContext:
public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ...
E o principal, que corrigiu meu problema: É estranho, mas na minha pasta WebApi / bin DataModel.exe era antigo, não atualizado desde a última compilação. Como as migrações foram incorporadas ao meu assembly DataModel.exe, meu banco de dados WebApi atualizou usando miragens antigas. Fiquei confuso porque, depois de atualizar o banco de dados no WebApi, ele não corresponde ao script de migração mais recente do DataModel. O código a seguir cria automaticamente (se não existir) ou atualiza o banco de dados local de migração mais recente em minha pasta WebApi / App_Data.
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); ...
Tentei limpar e reconstruir a solução, mas não ajudou, do que removi completamente as pastas bin e obj de WebApi, excluí arquivos de banco de dados de WebApi / App_Data, construí, reiniciei WebApi, fiz uma solicitação a ele, criei o banco de dados correto - inicialização lenta (usando linhas acima), que corresponde à migração mais recente e a exceção não apareceu mais. Então, isso pode resolver o seu problema:
fonte
Isso pode acontecer quando você altera a anotação de dados de uma propriedade do modelo. por exemplo: adicionar [Obrigatório] a uma propriedade causará uma alteração pendente no design do banco de dados.
A solução mais segura é executar no Console do gerenciador de pacotes:
add-migration myMirgrationName
que exibirá as mudanças exatas no método Up (). Portanto, você pode decidir se realmente deseja aplicar essas alterações por meio de:
update-database
Caso contrário, você pode simplesmente excluir a migração mais recente da tabela __MigrationHistory e da pasta Migrations do Solution Explorer.
fonte
Basta excluir o histórico de migração em _MigrationHistory em seu banco de dados. Funcionou para mim
fonte
Eu estava tendo o mesmo problema que a7madx7, mas com versão estável do EF (v6.1.1), e encontrei a resolução postada em:
http://cybarlab.com/context-has-changed-since-the-database-was-created
com variação em: http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3
O segundo link inclui menção específica para VB ..... "você pode simplesmente adicionar todos os dados do banco de dados que estão tendo este problema em seu método app_start no arquivo global.asax como este" :
Database.SetInitializer(Of DatabaseContext)(Nothing)
NB: eu tive que substituir "DatabaseContext" pelo nome da minha classe implementando DbContext
Atualizar: Além disso, ao usar a abordagem codefirst para se conectar a tabelas existentes, verifique o banco de dados para ver se EF criou uma tabela "_migrationhistory" para armazenar mapeamentos. Renomeei esta tabela e, em seguida, consegui remover SetInitializer de global.asax.
fonte
Acabei de resolver um problema semelhante, excluindo todos os arquivos na pasta do site e, em seguida, republicado.
fonte
remover todas as tabelas de identidade
Delete _MigrationHistory Delete AspNetRoles Delete AspNetUserClaims Delete AspNetUserLogins Delete AspNetRoles Delete AspNetUser
fonte
No menu Ferramentas, clique em Gerenciador de Pacotes NuGet e em Console do Gerenciador de Pacotes (PMC). Insira os seguintes comandos no PMC.
Enable-Migrations Add-Migration Init Update-Database Execute o aplicativo. A solução para o problema é daqui
fonte
Quando estou desenvolvendo, prefiro usar esta aula prática para configurar Migrações.
Espero que ajude.
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; } }
fonte
Excluir linhas na tabela [__MigrationHistory] com productVersion mais antigo funcionou para mim. Esta resposta é para aqueles que não desejam excluir a tabela [__MigrationHistory] inteira. Basta excluir as linhas com a versão anterior na coluna ProductVersion. Espero que ajude alguém!
fonte
Abaixo estava o tipo de erro semelhante que encontrei
O modelo que suporta o contexto 'PsnlContext' mudou desde que o banco de dados foi criado. Considere o uso de migrações do Code First para atualizar o banco de dados ( http://go.microsoft.com/fwlink/?LinkId=238269 ).
Eu adicionei a seção abaixo no evento Application Start do Global.asax para resolver o erro
Database.SetInitializer (null);
Isso resolveu o problema
fonte
simplesmente o erro significa que seus modelos estão alterados e não estão sincronizados com o banco de dados, então vá para o console do gerenciador de pacotes,
add-migration foo2
isso dará uma dica do que está causando o problema, pode ser você removeu algo ou no meu caso eu removo uma anotação de dados . a partir daí, você pode obter a mudança e, com sorte, revertê-la em seu modelo.depois disso, exclua foo2.
fonte
Sei que estou muito atrasado, mas quero dar uma contribuição também. Este erro é realmente estranho, porque o navegador não é capaz de entender como as alterações devem ser processadas porque as classes e suas propriedades podem ter sido alteradas, mas não confirmadas no banco de dados.
Então faça uma coisa,
crie uma migração no Console do gerenciador de pacotes (Ferramentas> Gerenciador de pacotes NuGet> Console do gerenciador de pacotes) usando este comando:
onde UpdateMigration é o nome de sua migração. Você pode dar a ele qualquer nome de sua escolha, mas por favor seja específico.
Depois disso, precisamos apenas atualizar o banco de dados, então execute:
Agora que você comprometeu suas alterações no banco de dados, apenas atualize seu navegador e pronto!
Espero que isto ajude.
fonte
isso ocorre porque você adiciona alguma propriedade a um de seu modelo e não o fez
update-Database
. para resolver isso você tem que removê-lo do modelo ouadd-migration anyProperName
com essas propriedades eUpdate-database
.fonte
Este erro me ocorreu quando fiz alterações no meu modelo e não fiz a migração para as alterações para atualizar o banco de dados.
Se você já fez alterações em seu modelo no Code First Migration Schema
Não se esqueça de adicionar migração
add-migration UpdatesToModelProperites
O comando acima lerá todas as mudanças que você fez no modelo e as escreverá nos métodos Up () e Down ().
Em seguida, basta atualizar seu banco de dados usando o comando abaixo.
update-database
Foi isso que funcionou para mim.
fonte
Exclua o banco de dados existente, crie um novo banco de dados com o mesmo nome, copie todos os dados ... vai funcionar
fonte