Строка подключения к нескольким базам данных: где хранить ее в моем приложении
У меня другая база данных с той же схемой. Мне нужно подключиться к одному из них в соответствии с клиентом, который был подключен. Например, если ClientA подключен, я должен подключиться к DatabaseA; Если ClientB подключен, я должен подключиться к DatabaseB; Теперь у меня есть многоуровневое приложение: уровень представления, уровень обслуживания и уровень хранилища. С некоторой логикой я получаю правильную строку подключения!
Итак.. Что мне нужно сейчас.
Я не знаю, где хранить строку подключения для этого клиента! Я думал в сессии. Но если я сохраню это в сеансе, мне придется передавать его при каждом вызове, который я делаю, на уровень хранилища, потому что сеанс не виден в хранилище. Я думаю, что это худшее решение, которое я мог бы принять.
Я хотел бы, чтобы выбранная строка подключения была просто слоем хранилища в глобальной переменной для этого клиента.
Предложение? Спасибо
4 ответа
Если вы хотите сохранить глобальные данные для веб-сайта - вы можете хранить любые данные в классе приложения, более подробную информацию вы можете проверить по следующей ссылке: http://www.asp.net/web-forms/overview/data-access/caching-data/caching-data-at-application-startup-cs Если у вас есть отдельные части приложения, вы можете сохранить общие данные в файле XML и создать ConfigManager в каждом домене приложения или использовать таблица базы данных.
После стольких обсуждений я хотел бы поделиться своими мыслями на основе своего опыта.
Всегда желательно, чтобы строка подключения была разрешена на уровне хранилища для клиента, к которому выполняется подключение. Однако это может быть кэшировано в приложении.
У вас будет бизнес-уровень, содержащий все ваши бизнес-объекты, которые находятся в приложении, и он будет доступен на всех уровнях приложения.
Если механизм разрешения строки соединения находится в этом слое [конечно же, в кеше], он будет элегантным и простым в использовании.
Почему вы не создаете репозиторий ConnectionString в своем приложении, и на основе логики вы получаете правильный CS. Что-то вроде таблицы поиска, статическое. Если вы хотите изменить ConnectionStrings, вы можете использовать ваш app.config и получать их оттуда в любое время, когда они вам нужны.
Вероятно, лучший способ для вас - иметь единую базу данных, в которой пользовательские таблицы имеют внешние ключи для таблицы Users.
Вы можете узнать больше о мультитенантных архитектурах из этой статьи Microsoft. Вот целая тема на эту тему: asp.net mvc несколько строк подключения