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.
I found the code working by changing
static LaundryShopContext() { Database.SetInitializer<LaundryShopContext>( new DropCreateDatabaseIfModelChanges<LaundryShopContext>()); }
into
static LaundryShopContext() { Database.SetInitializer<LaundryShopContext>( new DropCreateDatabaseAlways<LaundryShopContext>()); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With