Entity framework 如何使用不同的连接字符串(但使用相同的数据库)进行迁移

Entity framework 如何使用不同的连接字符串(但使用相同的数据库)进行迁移,entity-framework,Entity Framework,我一直在使用这样的连接字符串将我的网站连接到我的数据库: <add name="MyDb" connectionString="Data Source=MyDb; Initial Catalog=Staging; User Id=website_staging; Password=secret;" providerName="System.Data.SqlClient" /> 我更改了在我的DatabaseMigrationCo

我一直在使用这样的连接字符串将我的网站连接到我的数据库:

<add name="MyDb" 
     connectionString="Data Source=MyDb;
     Initial Catalog=Staging;
     User Id=website_staging;
     Password=secret;" 
     providerName="System.Data.SqlClient" />
我更改了在我的
DatabaseMigrationConfig
类中初始化的上下文使用的连接字符串的名称:

public class DatabaseMigrationConfig
{
    internal static void Register()
    {
        using (var context = new MyDbContext(Name="Migrations"))
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, 
                                    Migrations.Configuration>());
            context.Database.Initialize(false);
        }
    }
}

然后我试着发布这个网站。它似乎正确地选择了具有更高权限的连接字符串,但它尝试运行
初始
迁移。我怎样才能阻止它这样做呢?

我最终解决了这个问题,将
website\u staging\u migrations
用户添加到
db\u datareader
db\u datawriter
角色以及
db\u ddladmin
角色中

用户显然需要读取
\u MigrationHistory
表中的数据。让我吃惊的是,EF没有将访问表的失败报告为错误,而是在尝试运行初始迁移时出现了此错误:

There is already an object named '----' in the database.
用户还需要写入
\uu MigrationHistory
表。在将用户添加到
db\u datawriter
角色之前,我一直存在此错误:

The INSERT permission was denied on the object '__MigrationHistory',
database 'Staging', schema 'dbo'.

有道理。由于安全原则,您不应该区分“此表不存在”和“您没有此表的权限”之间的区别。“此表不存在”等同于“初始迁移未完成”
There is already an object named '----' in the database.
The INSERT permission was denied on the object '__MigrationHistory',
database 'Staging', schema 'dbo'.