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