Поиск гибкого способа указания строки подключения, используемой членством ASP.NET - PullRequest
3 голосов
/ 17 марта 2010

Я разрабатываю веб-приложение asp.net и использую членство в ASP.NET. Приложение использует схему членства и все необходимые объекты в основной базе данных приложения. Однако во время разработки мне приходится переключаться на разные базы данных для разных сценариев разработки и тестирования. Для этого у меня есть файл раздела с строками внешних подключений, а также раздел с внешними настройками приложения, которые позволяют мне не изменять основной файл web.config, а легко переключать БД, изменяя настройки только в разделе настроек приложения.

Мои файлы, как показано ниже:

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

Из-за этого каждый раз, когда мне приходится редактировать их, чтобы использовать новую базу данных.

Есть ли способ настроить поставщика членства, чтобы использовать настройку приложения, чтобы выбрать соединение БД для членства БД? Или «перенаправить» его, чтобы прочитать настройки соединения откуда-то еще? Или, по крайней мере, иметь это во внешнем файле (например, local.config)

Может быть, это какой-то простой способ обернуть провайдера членства asp.net intio в моего собственного провайдера, который будет просто читать строку подключения, откуда я хочу, и передавать ее исходному провайдеру членства, а затем просто делегировать всю функциональность членства членству asp.net провайдер.

Ответы [ 3 ]

1 голос
/ 17 июня 2010

Я нашел это решение для создания унаследованных классов и переопределения метода Initialize () для изменения строки подключения. У меня хорошо сработало, но настройки web.config могут быть немного хитрыми. В итоге мне пришлось создать SqlMembershipProvider и SqlRoleProvider.

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

1 голос
/ 17 марта 2010

Я использую различные внешние файлы конфигурации для строк подключения в этой ситуации.Возможно (в зависимости от конкретной ситуации) вы можете использовать события предварительной сборки Visual Studios для копирования файлов в нужные места.

0 голосов
/ 13 апреля 2010

На самом деле, подумав немного, я нашел решение своей проблемы.

Первоначально я думал установить конкретное имя строки подключения в local.config, который будет указывать на строку подключения в разделах строки подключения. Но при таком подходе мне пришлось изменить имя строки подключения также в настройках членства

Новый подход, который помог мне получить единственную ссылку на строку подключения (для использования моим DAL и членством), был следующий:

  1. в web.config У меня есть настройка, используемая моим DAL, в которой хранится имя строки подключения:

  2. настройки, относящиеся к членству, имеют ссылку на одну и ту же строку подключения


Web.config будет одинаковым для всех экземпляров моего приложения, поэтому никаких изменений в нем не требуется

  1. Я извлекаю строки соединений во внешний файл, с этим параметром в web.config

  2. Затем я определяю конкретную строку подключения для определенного экземпляра в файле connections.config


Используя этот подход, я смог создать один неизменяемый файл web.config, специфичный для приложения, общий для всех экземпляров, а затем конкретную строку подключения к определенному экземпляру, которая позволяет как DAL, так и членству использовать одну и ту же базу данных

...