3

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

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

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

4

3 回答 3

3

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

应该可以,我就是这么干的。

于 2012-05-17T11:11:28.027 回答
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.");
        }
    }
}
于 2013-03-25T07:48:07.963 回答
0

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

PM> Enable-Migrations
于 2012-05-17T09:49:45.330 回答