加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

entity-framework – 如何使用不同的连接字符串(但相同的数据库)

发布时间:2020-12-12 16:24:14 所属栏目:MsSql教程 来源:网络整理
导读:我一直在使用这样的连接字符串将我的网站连接到我的数据库: add name="MyDb" connectionString="Data Source=MyDb; Initial Catalog=Staging; User Id=website_staging; Password=secret;" providerName="System.Data.SqlClient" / website_staging用户是db_
我一直在使用这样的连接字符串将我的网站连接到我的数据库:
<add name="MyDb" 
     connectionString="Data Source=MyDb;
     Initial Catalog=Staging;
     User Id=website_staging;
     Password=secret;" 
     providerName="System.Data.SqlClient" />

website_staging用户是db_ddladmin角色的成员,因此当我发布并运行我的MigrateDatabaseToLatestVersion初始化程序时,它具有将数据库自动迁移到最新版本所需的权限.

我希望减少标准用户的权限(通过仅将其添加到db_datareader和db_datawriter角色),并在迁移期间与其他用户(以db_ddladmin角色)连接.

所以我添加了另一个具有不同名称和用户的连接字符串:

<add name="Migrations" 
     connectionString="Data Source=MyDb;
     Initial Catalog=Staging;
     User Id=website_staging_migrations;
     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);
        }
    }
}

在我的Migrations.Configuration类的构造函数中,我还更改了连接字符串:

internal sealed class Configuration : DbMigrationsConfiguration<SID2013Context>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        AutomaticMigrationDataLossAllowed = false;
        string cs = ConfigurationManager.ConnectionStrings["Migrations"].ConnectionString;
        TargetDatabase = new DbConnectionInfo(cs,"System.Data.SqlClient");
    }
}

然后我尝试发布网站.它似乎正确选择具有更高权限的连接字符串,但它尝试运行初始迁移.我怎么能阻止它呢?

解决方法

我最终通过将website_staging_migrations用户添加到db_datareader和db_datawriter角色以及db_ddladmin角色来解决此问题.

用户显然需要读取__MigrationHistory表中的数据.让我感到惊讶的是EF没有报告无法访问该表作为错误,而是在尝试运行初始迁移时遇到此错误:

There is already an object named '----' in the database.

用户还需要写入__MigrationHistory表.我收到此错误,直到我将用户添加到db_datawriter角色:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读