我有一个Web应用程序的解决方案。此应用程序使用实体框架和代码优先。然后我有第二个项目,一个控制台应用程序。该控制台应用程序共享保存迁移的程序集。停止运行迁移引用的dll
有没有办法让这个控制台应用程序永远不会运行Migrations?可能发生的情况是,该控制台应用程序将包含尚未在Web应用程序中部署的较新版本。我喜欢确保控制台不会破坏Web应用程序。更好的是让控制台不能更新数据库。
我有一个Web应用程序的解决方案。此应用程序使用实体框架和代码优先。然后我有第二个项目,一个控制台应用程序。该控制台应用程序共享保存迁移的程序集。停止运行迁移引用的dll
有没有办法让这个控制台应用程序永远不会运行Migrations?可能发生的情况是,该控制台应用程序将包含尚未在Web应用程序中部署的较新版本。我喜欢确保控制台不会破坏Web应用程序。更好的是让控制台不能更新数据库。
设置数据库初始化器为空在DbContext
构造:
public class ConsoleContext : DbContext
{ public ConsoleContext()
: base("Name=" + Config.ConnectionStringName)
{
// Prevent attempt to initialize a database for this context
Database.SetInitializer<DtoContext>(null);
}
}
另外, 在你的web应用:
protected void Application_Start()
{
Database.SetInitializer<MyDbContext>(
new MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>());
}
,并在您的控制台应用程序:
protected void Application_Start()
{
Database.SetInitializer<DtoContext>(null);
}
而且,要更加确定地使用两种不同的方法数据库用户。如果您使用的是Sql Server,则Web应用程序需要db_datareader
,db_datawriter
和角色。控制台应用程序只应db_datareader
和db_datawriter
角色,以防止它使用原始上下文注入到另一个类更改数据库架构
简单)是的,我有一个很好的解决方案。在Nuget控制台中,您必须为命令提供连接字符串和目标迁移:添加迁移/更新数据库。
需要代码)您也可以使用DbMigrator以编程方式执行此操作。
I'm所以这不会工作 – Jepzen
你可以在控制台应用程序使用不同的连接字符串与只具有读/写权限的不同数据库用户 – Colin
是的,我只是在玩这个想法。仍然有兴趣看看是否有其他方式 – Jepzen