从 运行 迁移中停止引用的 dll

Stop a referenced dll from running migrations

我有一个网络应用程序解决方案。此应用程序使用 Entity Framework 和 Code First。然后我有第二个项目,一个控制台应用程序。此控制台应用程序共享保存迁移的程序集。

有没有办法让这个控制台应用程序永远不会 运行 迁移?这个控制台应用程序可能会包含一个尚未部署到 Web 应用程序中的较新版本。我想确保控制台没有破坏 Web 应用程序的风险。最好让控制台在更新数据库时失败。

简单)是的,我有一个很好的解决方案。在 Nuget 控制台中,您必须为命令提供连接字符串和目标迁移:Add-Migration/Update-Database.

需要代码)您也可以使用 DbMigrator 以编程方式执行此操作。

在您的 DbContext 构造函数中将数据库初始化程序设置为空:

public class ConsoleContext : DbContext
{      public ConsoleContext()
        : base("Name=" + Config.ConnectionStringName)
    {
        // Prevent attempt to initialize a database for this context
        Database.SetInitializer<DtoContext>(null);
    }
}

或者, 在您的网络应用程序中:

protected void Application_Start()
{
    Database.SetInitializer<MyDbContext>(
       new MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>());
}

并在您的控制台应用程序中:

protected void Application_Start()
{
    Database.SetInitializer<DtoContext>(null);
}

并且,为了双重确定,使用两个不同的数据库用户。如果您使用 Sql 服务器,Web 应用程序将需要 db_datareaderdb_datawriterdb_ddladmin 角色。控制台应用程序应仅处于 db_datareaderdb_datawriter 角色,以防止它更改数据库架构