搜索灵活的方式来指定ASP.NET成员使用的连接字符串

时间:2010-03-17 08:27:00

标签: asp.net asp.net-membership membership membership-provider

我开发了一个asp.net Web应用程序,并使用ASP.NET成员资格提供程序。应用程序使用成员模式和主应用程序数据库中的所有必需对象 但是,在开发过程中,我必须切换到各种数据库,以用于不同的开发和测试场景。为此,我有一个外部连接字符串部分文件和一个外部appsettings部分,它允许我不改变主web.config,但通过仅在appsettings部分更改设置,轻松切换数据库。

我的文件如下:

<connectionStrings configSource="connections.config">
</connectionStrings>

<appSettings file="local.config">
    ....

ConnectionStrings看起来像往常一样:

<connectionStrings>
  <add name="MyDB1" connectionString="..." ... />
  <add name="MyDB2" connectionString="..." ... />
  ....
</connectionStrings>

local.config如下

<appSettings>
    <add key="ConnectionString" value="MyDB2" />

我的代码考虑使用此连接字符串

但是web.config中的成员资格设置直接在设置中包含连接字符串名称,例如

<add name="MembershipProvider" connectionStringName="MyDB2" ...>
....
<add name="RoleProvider" connectionStringName="MyDB2" ...>

因此,每次我都要编辑它们以使用新的数据库。

有没有办法配置成员资格提供程序使用appsetting为成员资格数据库选择数据库连接?或者“重定向”它以从其他地方读取连接设置?或者至少在一些外部文件(如local.config)

中有这个

也许是一种简单的方法来包装asp.net成员资格提供者intio我自己的提供者,它只是从我想要的地方读取连接字符串并将其传递给原始成员资格提供者,然后将整个成员资格功能委托给asp.net成员资格提供商。

3 个答案:

答案 0 :(得分:1)

在这种情况下,我为连接字符串使用不同的外部配置文件。可能(取决于您的具体情况)您可以使用Visual Studios预构建事件将文件复制到正确的位置。

答案 1 :(得分:1)

我发现这个解决方案可以创建继承的类并覆盖Initialize()方法来更改连接字符串。对我来说工作得很好,但web.config设置可能有点棘手。我最终不得不创建一个SqlMembershipProvider和一个SqlRoleProvider。

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/260d8536-c39f-41ec-b181-4d452cf054b3

答案 2 :(得分:0)

实际上,经过一番思考后,我找到了解决问题的方法。

我最初的想法是在local.config中设置特定的连接字符串名称,它将指向连接字符串部分中的连接字符串。但是通过这种方法,我还必须在与会员相关的设置中更改连接字符串名称

帮助我对连接字符串进行单一引用的新方法(由botrh我的DAL和成员资格使用)如下:

    web.config中的
  1. 我有一个设置,由我的DAL使用,它存储连接字符串的名称:

    &lt; add key =“ConnectionString”value =“ManagDB”/&gt;

  2. 与会员相关的设置引用了相同的连接字符串

    &lt; add name =“MembershipProvider”connectionStringName =“ManagDB”...&gt;
    &lt; add name =“RoleProvider”connectionStringName =“ManagDB”...&gt;

  3. 对于我的所有应用实例,Web.config都是相同的,因此不需要进行任何更改

    1. 我将连接串连接到外部文件中,并在web.config

      中使用此设置

      &lt; connectionStrings configSource =“connections.config”&gt; &LT; /&的ConnectionStrings GT;

    2. 然后我在文件connections.config

      中为某个实例定义特定的连接字符串

      &LT;&的ConnectionStrings GT;
        &lt; add name =“MyDB”connectionString =“Data Source = ...”providerName =“System.Data.SqlClient”/&gt; &LT; /&的ConnectionStrings GT;

    3. 使用这种方法,我能够拥有一个特定于应用程序的单一,不可更改的web.config,对所有实例都是通用的,然后是某个实例的特定连接字符串,允许DAL和成员资格使用相同的数据库

相关问题