Прежде всего, я больше нигде не встречал эту ошибку и полагаю, что это не копия, поэтому сначала прочтите всю ситуацию.
Все работало нормально, тогда я попытался обновить один из моих классов модели ( класс App и обновление теперь оставлены прокомментированными), который я перечислю ниже; и бум, у меня была эта ужасная ошибка.
Модель, поддерживающая контекст ApplicationDbContext, изменилась с момента создания базы данных. Рассмотрите возможность использования Code First Migrations для обновления базы данных ( 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 (действие действия) в 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 действие) в System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase () в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBasey entityType) в System.Data.Entity.Internal.Linq.InternalSet1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet
1. Включить (строковый путь) в1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable
источник System.Data.Entity.Infrastructure.DbQuery 1, строковый путь) в System.Data.Entity.QueryableExtensions.Include [T, TProperty] (1 source, Expression
путь IQueryable 1) в Microsoft.AspNet.Identity. EntityFramework.UserStore6.GetUserAggregateAsync(Expression
1 filter) в Microsoft.AspNet.Identity.EntityFramework.UserStore6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager
2.FindByNameAsync (String userName) в Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext () --- Конец трассировки стека из предыдущего местоположения, где исключение было создано --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) в ControlPanel.Web.Controllers..dAccountController : \ Projects \ FULL \ Control Panel \ ControlPanel.Web \ Controllers \ AccountController.cs: строка 56
Сначала я подумал, что это может быть проблема с миграцией, поэтому я полностью удалил базу данных, снова включил миграции, добавил миграцию Init и обновил базу данных, используя
update-database -force -verbose
Все идет хорошо, жалоб нет, однако всякий раз, когда я пытаюсь войти на свой сайт, я получаю предыдущую ошибку. Я делал миграцию около десяти раз, но не смог решить проблему.
Вот мои доменные классы (модели):
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; }
}
Вот мои 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");
}
}
Ответы:
На всякий случай, если кто-то еще наткнется на это, он делал первую реализацию базы данных, как я.
Я внес изменения, расширив
ApplicationUser
класс, добавив новое поле вAspNetUsers
таблицу, а затем при запуске возникла эта ошибка.Я смог решить эту проблему, удалив запись, созданную в
__MigrationHistory
таблице (там была только одна запись). Я предполагаю, что EF решил, что мне нужно обновить свою базу данных с помощью инструмента миграции, но я сам уже сделал это вручную.источник
ApplicationDbContext
У меня это сработало - никаких других изменений не потребовалось.
DELETE FROM [dbo].[__MigrationHistory]
источник
Этот пост исправил мою проблему. Все дело в добавлении следующей строки
Application_Start()
вGlobal.asax
:Database.SetInitializer<Models.YourDbContext>(null);
Однако это вызывает воссоздание базы данных для каждого редактирования в вашей модели, и вы можете потерять свои данные.
источник
Если вы удалите таблицу «[__MigrationHistory]» из «База данных> Системные таблицы», она заработает.
источник
[__MigrationHistory]
таблицы просто обновите также mmodel EDMX.Это была такая странная ошибка, это была не моя ошибка в конце, это была ошибка Microsoft, я установил Entity framework в «предварительной» версии, и она была ответственна за эту ошибку, когда я обновился до стабильной отпустите его, спасибо, все поверили мне, когда я задал этот вопрос, я искал примерно неделю для его решения, поэтому я почти уверен, что этой проблемы нет больше нигде: версия entity framework.dll, которая вызвала проблема была 6.0.2 если поможет.
источник
Эта ошибка вызывает у всех головную боль: убедитесь, что все ваши проекты имеют ссылку на одну и ту же сборку Entity Framework.
Короткий рассказ длинный:
Моя модель и мое приложение были в разных сборках. Эти сборки ссылались на другую версию Entity framework. Я предполагаю, что две версии создали разные идентификаторы для одной и той же модели. Поэтому, когда мое приложение запускало идентификатор модели, не совпадал с идентификатором последней миграции в __MigrationHistory. После обновления всех ссылок на последний выпуск EF ошибка больше не появлялась.
источник
Я потратил много дней на решение этой проблемы, проанализировал много разных сообщений, попробовал множество вариантов и наконец исправил. Эти 2 проекта в моем решении используют первые миграции кода EF:
Я получил эту ошибку при запросе WebApi ...
Моя среда:
Здесь я собрал все замечания, на которые следует обратить внимание, и все условия / требования, которые должны быть выполнены, чтобы избежать упомянутого исключения:
Имя строки подключения, например MyConnectionString в файле конфигурации запускаемого проекта (Web.config / App.config):
<configuration> <connectionStrings> <add name="MyConnectionString" connectionString="..."> </connectionStrings> <configuration>
должен быть равен параметру, переданному в конструкторе вашего DbContext:
public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ...
И главное, что устранило мою проблему: это странно, но в моей папке WebApi / bin DataModel.exe был старым, не обновлялся с момента последней сборки. Поскольку миграции были встроены в мою сборку DataModel.exe, моя база данных WebApi обновлялась с использованием старых зеркал. Меня смутило, почему после обновления базы данных в WebApi она не соответствует последнему скрипту миграции из DataModel. Следующий код автоматически создает (если не существует) или обновляет локальную базу данных последней миграции в моей папке WebApi / App_Data.
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); ...
Я попробовал очистить и перестроить решение, но это не помогло, чем я полностью удалил папки bin и obj из WebApi, удалил файлы базы данных из WebApi / App_Data, построил, перезапустил WebApi, сделал запрос к нему, он создал правильную базу данных - ленивая инициализация (с использованием строки выше), что соответствует последней миграции, и исключение больше не появлялось. Итак, это может решить вашу проблему:
источник
Это может произойти, когда вы изменяете аннотацию к данным свойства модели. например: добавление [Обязательно] к свойству вызовет отложенное изменение в структуре базы данных.
Самым безопасным решением является запуск в консоли диспетчера пакетов:
add-migration myMirgrationName
который отобразит точные изменения в методе Up (). Таким образом, вы можете решить, действительно ли вы хотите применить такие изменения, с помощью:
update-database
В противном случае вы можете просто удалить последнюю миграцию из таблицы __MigrationHistory и из папки Migrations в обозревателе решений.
источник
У меня была та же проблема, что и у a7madx7, но со стабильной версией EF (v6.1.1), и я нашел разрешение, опубликованное в:
http://cybarlab.com/context-has-changed-since-the-database-was-created
с вариациями в: http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3
Вторая ссылка включает конкретное упоминание о VB ..... "вы можете просто добавить весь контекст базы данных, у которого есть эта проблема, в свой метод app_start в файле global.asax следующим образом" :
Database.SetInitializer(Of DatabaseContext)(Nothing)
NB: мне пришлось заменить "DatabaseContext" на имя моего класса, реализующего DbContext
Обновление. Кроме того, при использовании подхода «сначала код» для подключения к существующим таблицам проверьте базу данных, чтобы узнать, создал ли EF таблицу «_migrationhistory» для хранения сопоставлений. Я переименовал эту таблицу, после чего смог удалить SetInitializer из global.asax.
источник
Просто удалите историю миграции в _MigrationHistory в своей базе данных. Это сработало для меня
источник
Я просто решил аналогичную проблему, удалив все файлы в папке веб-сайта, а затем повторно опубликовав ее.
источник
удалить все идентификаторы таблиц
Delete _MigrationHistory Delete AspNetRoles Delete AspNetUserClaims Delete AspNetUserLogins Delete AspNetRoles Delete AspNetUser
источник
В меню «Сервис» выберите «Диспетчер пакетов NuGet», а затем - «Консоль диспетчера пакетов (PMC)». Введите следующие команды в PMC.
Enable-Migrations Add-Migration Init Update-Database Запустите приложение. Решение проблемы отсюда
источник
Когда я разрабатываю, я предпочитаю использовать этот практический класс для настройки миграции.
Надеюсь, это поможет.
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; } }
источник
У меня сработало удаление строк в таблице [__MigrationHistory] с помощью более старой версии продукта. Это ответ для тех, кто не хочет удалять всю таблицу [__MigrationHistory]. Просто удалите строки со старой версией в столбце ProductVersion. Надеюсь, это кому-то поможет!
источник
Ниже была подобная ошибка, с которой я столкнулся
Модель, поддерживающая контекст «PsnlContext», изменилась с момента создания базы данных. Рассмотрите возможность использования Code First Migrations для обновления базы данных ( http://go.microsoft.com/fwlink/?LinkId=238269 ).
Я добавил следующий раздел в событие запуска приложения Global.asax, чтобы устранить ошибку.
Database.SetInitializer (ноль);
Это устранило проблему
источник
просто ошибка означает, что ваша модель имеет изменения и не синхронизирована с БД, поэтому перейдите в консоль диспетчера пакетов,
add-migration foo2
это даст намек на то, что вызывает проблему, может быть, вы что-то удалили или в моем случае я удаляю аннотацию данных . оттуда вы можете получить изменение и, надеюсь, отменить его в своей модели.после этого удалите foo2.
источник
Я знаю, что очень опаздываю, но я тоже хочу внести свой вклад. Эта ошибка действительно странная, потому что браузер не может понять, как следует отображать изменения, потому что классы и их свойства могли измениться, но не зафиксированы в базе данных.
Так что сделай одно,
создайте одну миграцию в консоли диспетчера пакетов (Инструменты> Диспетчер пакетов NuGet> Консоль диспетчера пакетов) с помощью этой команды:
где UpdateMigration - это имя вашей миграции. Вы можете дать ему любое имя по вашему выбору, но, пожалуйста, будьте конкретны.
После этого нам просто нужно обновить базу данных, поэтому запустите это:
Теперь, когда вы зафиксировали изменения в базе данных, просто обновите страницу в браузере и готово!
Надеюсь это поможет.
источник
это происходит потому, что вы добавляете какое-то свойство к одной из своих моделей, а вы этого не делали
update-Database
. чтобы решить эту проблему, вам нужно удалить его из модели или вы должны использоватьadd-migration anyProperName
эти свойства иUpdate-database
.источник
Эта ошибка возникла у меня, когда я внес изменения в свою модель и не выполнил миграцию изменений для обновления базы данных.
Если вы когда-либо вносили изменения в свою модель в схеме Code First Migration Schema
Не забудьте добавить миграцию
add-migration UpdatesToModelProperites
Вышеупомянутая команда прочитает все изменения, которые вы сделали в модели, и запишет их в методы Up () и Down ().
Затем просто обновите свою базу данных, используя команду ниже.
update-database
Это то, что сработало для меня.
источник
Удалите существующий db, создайте новый db с тем же именем, скопируйте все данные ... он будет работать
источник