Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架中的模型兼容性异常_Entity Framework_Code First - Fatal编程技术网

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

Entity framework 实体框架中的模型兼容性异常,entity-framework,code-first,Entity Framework,Code First,当我执行web应用程序并尝试将数据保存到数据库时,会发生以下异常: 无法检查模型兼容性,因为数据库不兼容 包含模型元数据。只能检查模型的兼容性 使用代码优先或代码优先迁移创建的数据库 我尝试了很多方法来解决这个问题,但它仍然存在 您是否尝试使用代码优先迁移?如果是,您是否在PackageManager控制台中运行了以下命令 PM> Enable-Migrations 如果您是在本地计算机上开发,那么使用迁移并不是真正必要的。您可以将数据库初始值设定项设置为始终删除数据库,运行一些与数据库

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

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


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

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

PM> Enable-Migrations

如果您是在本地计算机上开发,那么使用迁移并不是真正必要的。您可以将数据库初始值设定项设置为始终删除数据库,运行一些与数据库交互的代码,然后您将看到数据库将被重新创建,错误将消失


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

手动删除数据库,然后使用以下命令重新启动项目:

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>();
    }
}
公共类DbDataContext:DbContext { 公共IDbSet FlightTypes{get;set;} 公共DbDataContext() { //验证数据库是否存在或是否与模型兼容 //当数据库具有生产性时使用-在这种情况下,对数据库更改使用代码优先迁移 //SetInitializer(新的ValidateDatabase()); //自定义初始值设定项-包含所需条目的板条箱数据库 //开发中使用 SetInitializer(新的DatabaseInitializer()); } 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } } 数据库初始值设定项:

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);
     }
 }
公共类数据库初始值设定项:DropCreateDatabaseIfModelChanges
{
受保护的重写无效种子(DbDataContext DbDataContext)
{
添加(新的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.");
        }
    }
}
public类ValidateDatabase:IDatabaseInitializer,其中TContext:DbContext
{
public void InitializeDatabase(TContext上下文)
{
如果(!context.Database.Exists())
{
抛出新的InvalidOperationException(“数据库不存在”);
}
如果(!context.Database.CompatibleWithModel(true))
{
抛出新的InvalidOperationException(“数据库与实体模型不兼容”);
}
}
}

是的,我已经运行了它,还运行了命令:更新数据库!但问题依然存在!!是的,Leon先生,这是真的,我只添加了
Database.SetInitializer(新的DropCreateDatabaseIfModelChanges())在Global.asax.cs上,现在它可以工作了。每次数据库中的所有数据都会被删除!