EF5 Получение этого сообщения об ошибке: Совместимость модели не может быть проверена, поскольку firebase database не содержит метаданных модели

У меня есть это сообщение об ошибке, которое постоянно отображается при каждом запуске приложения. Я использую Entity Framework 5: Code First

Вот сообщение об ошибке,

 System.NotSupportedException: Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations. at System.Data.Entity.Internal.ModelCompatibilityChecker.CompatibleWithModel(InternalContext internalContext, ModelHashCalculator modelHashCalculator, Boolean throwIfNoMetadata) at System.Data.Entity.Internal.InternalContext.CompatibleWithModel(Boolean throwIfNoMetadata) at System.Data.Entity.Database.CompatibleWithModel(Boolean throwIfNoMetadata) at System.Data.Entity.DropCreateDatabaseIfModelChanges`1.InitializeDatabase(TContext context) at System.Data.Entity.Database.c__DisplayClass2`1.b__0(DbContext c) at System.Data.Entity.Internal.InternalContext.c__DisplayClass8.b__6() at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() at System.Data.Entity.Internal.InternalContext.Initialize() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) at System.Data.Entity.DbSet`1.Add(TEntity entity) at LaundryService_DEMO.frmMain.btnCreate_Click(Object sender, EventArgs e) in d:\MyDocs\Visual Studio 2012\Projects\LaundryService_DEMO\LaundryService_DEMO\frmMain.cs:line 39 

Эта ошибка началась, когда я создал объект, называемый счет-фактурой. Вот полный код объекта,

 public class Invoice { public string InvoiceID { get; set; } public string CustomerID { get; set; } public string UserID { get; set; } public decimal TotalAmount { get; set; } public DateTime TransactionDate { get; set; } public DateTime PaymentDate { get; set; } public Customer CustomerField { get; set; } public SystemUser SystemUserField { get; set; } } public class InvoiceMap : EntityTypeConfiguration { public InvoiceMap() { // Primary Key this.HasKey(x => x.InvoiceID); // Property(ies) and Mapping(s) this.ToTable("Invoice"); this.Property(x => x.InvoiceID) .IsRequired() .HasMaxLength(15) .HasColumnName("InvoiceID") .HasColumnType("nVarchar"); this.Property(x => x.CustomerID) .IsRequired() .HasMaxLength(15) .HasColumnName("CustomerID") .HasColumnType("nVarchar"); this.Property(x => x.UserID) .IsRequired() .HasMaxLength(15) .HasColumnName("UserID") .HasColumnType("nVarchar"); this.Property(x => x.TotalAmount) .IsRequired() .HasColumnName("TotalAmount") .HasColumnType("decimal"); this.Property(x => x.TransactionDate) .IsRequired() .HasColumnName("TransactionDate") .HasColumnType("datetime"); this.Property(x => x.PaymentDate) .IsOptional() .HasColumnName("PaymentDate") .HasColumnType("datetime"); // Relationship this.HasRequired(x => x.CustomerField) .WithMany(x => x.InvoiceCollection) .HasForeignKey(y => y.CustomerID); this.HasRequired(x => x.SystemUserField) .WithMany(x => x.InvoiceCollection) .HasForeignKey(y => y.UserID); } } 

Чтобы реплицировать приложение, я включил файл проекта, который доступен для загрузки . И поэтому этот вопрос не будет заполнен кодом.

Если есть детали, которые я пропустил в вопросе, прокомментируйте, чтобы я мог включить его.

Я нашел код, работающий путем изменения

 static LaundryShopContext() { Database.SetInitializer( new DropCreateDatabaseIfModelChanges()); } 

в

 static LaundryShopContext() { Database.SetInitializer( new DropCreateDatabaseAlways()); } 

Вероятно, это связано с вашей базой данных, не содержащей таблицу _MigrationHistory (которую можно просмотреть с помощью SQL Server Management Studio в таблицах> Системных таблицах).

Не знаете, как вы управляете базой данных, но если вы все еще находитесь в разработке и используете EF Migrations, быстрое решение – удалить базу данных и запустить Update-Database, которая воссоздает всю базу данных и добавит таблицу _MigrationHistory.

Если вы хотите избежать выполнения этой проверки EF, вы можете добавить это в свой class DbContext

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } 

Если, как и я, это вызвано тем, что началось с Code First и менялось в середине проекта Project Database First. Все это вызвано одной простой строкой. Если вам необходимо оставить свою базу данных и ее данные в следующей строке:

 Database.SetInitializer(new ApplicationDbInitializer()); 

из этого раздела вашей модели.

 public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } static ApplicationDbContext() { // Set the database intializer which is run once during application start // This seeds the database with admin user credentials and admin role // Database.SetInitializer(new ApplicationDbInitializer()); } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } } 

Это часто случается при запуске со встроенными моделями идентификации. После того, как вы их заработаете, вы можете удалить эту строку, чтобы сохранить ее, но сохранить функциональность. Однако, если ваша модель изменится, ваша firebase database должна быть настроена так, чтобы она соответствовала .. то, что вы делаете в базе данных First development в любом случае!

Это также может произойти, если вы пытаетесь инициализировать контекст с ранее существующей базой данных с тем же именем, но это было создано с другой базой кода. Вот почему работает переход от DropCreateDatabaseIfModelChanges к DropCreateDatabaseAlways, последняя конфигурация заставляет базу данных воссоздаваться независимо от того, что в обход каких-либо версий версий баз данных, которые могут вызвать эту проблему.

Я знаю, что опаздываю на вечеринку, но я столкнулся с той же ошибкой, и у моей базы данных уже была таблица истории миграции.

Ошибка также может указывать неверный контекстный ключ в таблице истории. Это может произойти, если переместить class контекста базы данных в другое пространство имен, как это было во время рефакторинга.

Обновление значения ContextKey в таблице MigrationHistory в новое пространство имен контекста базы данных ContextKey проблему для меня .

Это решение не требует от вас DropCreateDatabaseAlways содержимого базы данных, поэтому оно может быть предпочтительнее решения DropCreateDatabaseAlways .

Я получил эту ошибку, когда добавляю
ContextKey = "MyProject.Repository.Common.DbContextA";

к Configuration.cs. После удаления этой строки она работает.

Я пробовал ниже 3 шага. Он работает для меня. Запустите следующие команды в консоли диспетчера пакетов 1. enable-migrations 2. update-database -verbose 3. add-migration initialmigrations -ignorechanges

ПРИМЕЧАНИЕ. Моим сценарием я уже создал db / tables (используя первый подход к коду (используя общую библиотеку контекста DB). Я пытаюсь использовать библиотеку в другом приложении и другой базе данных. Я вручную синхронизировал первый db на второй. Thats почему я столкнулся с этой проблемой.

 CreateDatabaseIfNotExists(); 
  • Код элемента Entity Framework (EF) Первый каскадный вывод для отношения «один к нулю» или «один»
  • Как «разогревать» Entity Framework? Когда он становится «холодным»?
  • Создание структуры составных ключевых объектов
  • Нестатический метод требует целевого
  • Код структуры Entity Framework Сначала используйте Guid как идентификатор с другой колонкой Identity
  • Mocking EF DbContext с Moq
  • Entity Framework объединяет 3 таблицы
  • EF LINQ включает несколько и вложенные объекты
  • Получить возвращаемое значение из хранимой процедуры
  • Отладка кода-первых кодов миграции Entity Framework
  • Давайте будем гением компьютера.