从 运行 迁移中停止引用的 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_datareader
、db_datawriter
和 db_ddladmin
角色。控制台应用程序应仅处于 db_datareader
和 db_datawriter
角色,以防止它更改数据库架构
我有一个网络应用程序解决方案。此应用程序使用 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_datareader
、db_datawriter
和 db_ddladmin
角色。控制台应用程序应仅处于 db_datareader
和 db_datawriter
角色,以防止它更改数据库架构