Заменить строку подключения для некоторых пользователей на asp.net Веб-сайт

#asp.net #entity-framework #connection-string #appsettings

#asp.net #entity-framework #строка подключения #настройки приложений

Вопрос:

Я изменяю asp.net Веб-сайт. Мне нужно использовать разные строки подключения для пользователей. Веб-сайт использует Entity Framework для доступа к данным.

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

Я нахожу решение для проектов — использование частичного класса для настроек. Но настроек на веб-сайте нет (возможно, я ошибаюсь?).

Комментарии:

1. почему вы используете разные строки подключения для разных пользователей?

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

3. Мы хотим использовать общую базу данных для авторизации и разные экземпляры для наших филиалов.

Ответ №1:

Вы можете просто загрузить новую строку подключения из своего web.config, базы данных или где бы вы ее ни использовали и назначить ее своему контекстному объекту при его создании. Смотрите: http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/2efc32f7-23ad-4fad-84cf-279badb394a5

Комментарии:

1. Нет, это не мой вариант. В устаревшем коде много конструкторов без параметров. Я должен установить подключение для одного пользователя к db1, а для второго пользователя к другой БД. Это должно быть прозрачно для устаревшего кода. В проекте EF (app.settings) используйте строку подключения с именем «Entities», а в web.config используйте ту же строку подключения. Я хочу на веб-сайте после аутентификации изменить его свойство.

2. вам придется провести рефакторинг своего кода, чтобы поддержать это. Волшебной палочки не существует. Если вы измените эти параметры во время выполнения в конфигурации, это повлияет на ваше приложение. Другой вариант — изменить ваш конструктор entity framework, который является рефакторингом. Вы могли бы реорганизовать их все, чтобы иметь класс, который предоставляет это значение, но это все равно рефакторинг всех ваших местоположений, которые создают контекст для использования этого нового класса для этого.