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'.