实体框架中的模型兼容性异常

时间:2012-05-17 09:45:35

标签: entity-framework code-first

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

  

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

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

3 个答案:

答案 0 :(得分:3)

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

应该工作,我就是这样做的。

答案 1 :(得分: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>();
    }
}

DatabaseInitializer:

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

ValidateDatabase:

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.");
        }
    }
}

答案 2 :(得分:0)

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

PM> Enable-Migrations
相关问题