Переключение `ConnectionStrings` между локальным и удаленным с Linq для SQL - PullRequest
2 голосов
/ 04 марта 2010

Во-первых, под удаленным я имею в виду центральный выделенный SQL-сервер в нашей сети. Под локальной я имею в виду локальную установку SQL Express.

Моя ситуация только в доме. Никаких облачных сервисов, внешних сайтов и т. Д. Мое приложение позволяет пользователю работать автономно, но чтобы минимизировать трафик и некоторые другие проблемы, я бы хотел, чтобы они могли подключаться напрямую к центральному серверу либо автоматически, когда он доступен / или когда они устанавливают настройку, выбирая Центральный сервер.

Настройка довольно проста. Строка локального подключения для всех выглядит так ->

Data Source=.\SQLEXPRESS;Initial Catalog=MemberCenteredPlan;Integrated Security=True

и строка подключения к центральному SQL, например, ->

Data Source=CentralSQL;Initial Catalog=MemberCenteredPlan;Integrated Security=True

Кроме того, мои Данные находятся в отдельном проекте от моего пользовательского интерфейса, поэтому у меня возникли трудности с поиском доступа к файлу настроек из уровня данных для уровня пользовательского интерфейса.

Должен ли я добавить параметр во все методы и передать им переменную IsOnline? Кажется повторяющимся, но если бы я знал лучший способ, я не отправил бы сообщение во-первых.

Спасибо за помощь!

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

Ответы [ 2 ]

3 голосов
/ 04 марта 2010

Один из вариантов, который я использую, - это создание метода в DataContext (в частичном классе) в этом случае:

public static DataContext New
{
  get
  {
    var cs = IsConnected ? CentralConnectionString : LocalConnectionString;
    return new DataContext(cs);
  }
}

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

var DB = DataContext.New;
var result = from a in DB.....

Она хранит логику создания вашего datacontext в одном месте, если она удовлетворяет вашим потребностям, я нахожу, что она упрощает вещи везде

2 голосов
/ 04 марта 2010

Чтобы ответить на вопрос, который вы задали в комментарии к ответу Ника, его IsConnected - это свойство, добавленное к частичному классу. Вы можете определить это любым способом для определения этого состояния в вашей программе. Если это значение AppSetting, оно будет примерно таким:

public static bool IsConnected 
{ 
  get 
  {
       return ConfigurationManager.AppSettings["Online"] == "true";
  }
}
...