Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EF5 Getting this error message: Model compatibility cannot be checked because the database does not contain model metadata

I have this error message that keeps on displaying every time I run the application. I'm using Entity Framework 5: Code First

Here's the error message,

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.<SetInitializerInternal>b__0(DbContext c)    at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6()    at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)    at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()    at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>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 

This error started when I created an entity called invoice. Here's the full code of the entity,

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<Invoice> {     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);     } } 

In order to replicate the application, I have included the project file which is available for download. And so this question will not be full of code.

If there are details that I've missed in the question, please comment so I can include it.

like image 427
Pedigree Avatar asked Dec 28 '12 04:12

Pedigree


1 Answers

I found the code working by changing

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

into

static LaundryShopContext() {   Database.SetInitializer<LaundryShopContext>(     new DropCreateDatabaseAlways<LaundryShopContext>()); } 
like image 105
Pedigree Avatar answered Sep 20 '22 12:09

Pedigree