问题是关于:EntityFramework 6 CODE FIRST,Sql Server 2012
如何检测数据库架构已更改且与当前EF模型不兼容?
我在谈论生产服务器和应用程序。默认初始值设定项为“null”,当然它不会自动更新生产数据库。
但是如果数据库架构发生了变化,并且不再与我的模型兼容,我希望应用程序必须在程序启动时检测它。可以手动完成。
如果我没错,EntityFramework会在__MigrationHistory表上存储当前架构,并在第一个与上下文相关的操作上验证它,而不是在'null'初始化程序中验证它。由于这个原因,我想在应用程序启动时手动完成。
我假设EntityFramework有相关的功能,我希望它们不是私有的,我可以使用它们。
(我今天在我们的一个客户上发生了手动数据库架构更改导致的问题)
更新:实际上,运行相同的应用程序更新tsql脚本会发生数据库架构更改,但应用程序本身不会更新。
答案 0 :(得分:3)
使用自定义初始化程序完成此任务。
public class ValidateDatabase<TContext> : IDatabaseInitializer<TContext>
where TContext : DbContext
{
public void InitializeDatabase(TContext context)
{
if (!context.Database.Exists())
{
throw new ConfigurationException( "Database does not exist");
}
else
{
if (!context.Database.CompatibleWithModel(true))
{
throw new InvalidOperationException("The database is not compatible with the entity model.");
}
}
}
}