EntityFramework - 在生产时手动检测数据库方案更改

时间:2014-02-10 10:37:16

标签: entity-framework

问题是关于:EntityFramework 6 CODE FIRST,Sql Server 2012

如何检测数据库架构已更改且与当前EF模型不兼容?

我在谈论生产服务器和应用程序。默认初始值设定项为“null”,当然它不会自动更新生产数据库。

但是如果数据库架构发生了变化,并且不再与我的模型兼容,我希望应用程序必须在程序启动时检测它。可以手动完成。

如果我没错,EntityFramework会在__MigrationHistory表上存储当前架构,并在第一个与上下文相关的操作上验证它,而不是在'null'初始化程序中验证它。由于这个原因,我想在应用程序启动时手动完成。

我假设EntityFramework有相关的功能,我希望它们不是私有的,我可以使用它们。

(我今天在我们的一个客户上发生了手动数据库架构更改导致的问题)

更新:实际上,运行相同的应用程序更新tsql脚本会发生数据库架构更改,但应用程序本身不会更新。

1 个答案:

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