【问题标题】:Model compatibility exception in Entity Framework实体框架中的模型兼容性异常
【发布时间】:2012-05-17 09:45:35
【问题描述】:

当我执行我的网络应用程序并尝试将数据保存到数据库中时,会发生此异常:

无法检查模型兼容性,因为数据库没有 包含模型元数据。只能检查模型兼容性 使用 Code First 或 Code First 迁移创建的数据库。

我尝试了很多问题来解决这个问题,但它仍然存在!

【问题讨论】:

    标签: entity-framework code-first


    【解决方案1】:

    如果您在本地计算机上进行开发,则不需要使用迁移。您可以将数据库初始化程序设置为始终删除数据库,运行一些与数据库交互的代码,然后您将看到数据库将被重新创建并且错误将消失。

    应该可以,我就是这样做的。

    【讨论】:

    • 是的,Leon 先生,这是真的,我只在 Global.asax.cs 上添加了Database.SetInitializer(new DropCreateDatabaseIfModelChanges<TsContext>());,现在它可以工作了。
    • db中的所有数据每次都在删除!
    【解决方案2】:

    手动删除数据库,然后重启项目:

    public class DbDataContext : DbContext
    {
        public IDbSet<FlightType> FlightTypes { get; set; }
    
        public DbDataContext()
        {
            //Validates if database Exists or if is CompatibleWithModel
            //Using when Databes is productive - use code first migrations for db changes in this case
            //Database.SetInitializer(new ValidateDatabase<DbDataContext>());
    
            //Custom Initializer - crates databse with required entries
            //Using while developing
            Database.SetInitializer<DbDataContext>(new DatabaseInitializer<DbDataContext>());
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
    

    数据库初始化器:

    public class DatabaseInitializer<T> : DropCreateDatabaseIfModelChanges<DbDataContext>
    {
        protected override void Seed(DbDataContext dbDataContext)
        {
            dbDataContext.FlightTypes.Add(new FlightType { FlightTypeNummer = "axd", Name = "AXD_LX", IsDefault = true });
    
            base.Seed(dbDataContext);
         }
     }
    

    验证数据库:

    public class ValidateDatabase<TContext> : IDatabaseInitializer<TContext> where TContext : DbContext
    {
        public void InitializeDatabase(TContext context)
        {
            if (!context.Database.Exists())
            {
                throw new InvalidOperationException("Database does not exist");
            }
            if (!context.Database.CompatibleWithModel(true))
            {
                throw new InvalidOperationException("The database is not compatible with the entity model.");
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您是否尝试使用代码优先迁移?如果是这样,您是否在包管理器控制台中运行了以下命令?

      PM> Enable-Migrations
      

      【讨论】:

      • 是的,我已经运行了它,并且我还运行了命令:更新数据库!
      • 但问题依然存在!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多