Linq to Sql - установка строки подключения динамически на основе переменной среды

Мне нужно установить строку подключения для Linq to Sql на основе переменной окружения. У меня есть функция, которая вернет строку соединения из web.config на основе переменной окружения, но как мне заставить Linq всегда использовать эту "динамически создаваемую" строку соединения (желательно без необходимости указывать ее каждый раз)?

Я знаю, что я могу указать строку соединения с помощью конструктора, но как это работает при использовании datacontext в LinqDataSource?

Ответ 1

Использование:

MyDataClassesDataContext db = new MyDataClassesDataContext(dynamicConnString);

Для LinqDataSource перехватите событие ContextCreating и создайте DataContext вручную, как указано выше:

protected void LinqDataSource_ContextCreating(object sender, LinqDataSourceContextEventArgs e)
{
    e.ObjectInstance = new MyDataClassesDataContext (dynamicConnString);
}

От MSDN:

По умолчанию элемент управления LinqDataSource создает экземпляр типа, который указывается в ContextTypeName имущество. Элемент управления LinqDataSource вызывает конструктор по умолчанию объект контекста данных для создания экземпляр объекта. Возможно что вы должны использовать нестандартные конструктор, или вам нужно создать объект, который отличается от указанный в ContextTypeName имущество. В этом случае вы должны обрабатывать событие ContextCreating и вручную создать контекст данных объект.

Ответ 2

  • Откройте конструктор LINQ to SQL и откройте вкладку "Свойства" конструктора (сама схема), разверните "Соединение" и установите Application Settings на False. Сохранить.

  • Закройте это и откройте файл конструктора DataContext (dbml_name.designer.cs) и измените конструктор DataContext. Вы сразу заметите, как ваша строка подключения решила перейти сюда, когда вы отключили настройки приложения. Итак, часть, на которую нужно сосредоточиться, изменяет наследник base(). Переименование ConnString "ниже в соответствии с вашими собственными. Я также заметил DatabaseAttribute для класса, который, как я считаю, не играет большой роли и имеет какие-либо последствия для настроек соединения. Вам также понадобится ссылка на System.Configuration:

    public dbDataContext(): base (ConfigurationManager.ConnectionStrings [ "MyConnString" ]. ConnectionString, mappingSource)

  • Откройте App.config или Web.config в проекте, где находятся ваши классы LINQ to SQL, и переименуйте строку подключения в то, что вы определили как "MyConnString" .

  • Теперь вы должны отрезать всю запись с изменением имени и вставить ее либо в App.config, либо Web.config приложения, которое должно получить доступ к данным, таким как веб-приложение, Silverlight, WPF, WCF и т.д. Важно изменить файл конфигурации вызывающего приложения, которое должно получить доступ к данным, поскольку ConfigurationManager, определенный в ваших классах LINQ to SQL, будет искать файл .config, из которого выполняется вызывающее приложение, независимо от того, где определены классы LINQ to SQL. Как вы можете видеть, это работает немного иначе, чем раньше.

  • Теперь щелкните правой кнопкой мыши и откройте Свойства в своем DAL или проекте, содержащем ваши классы LINQ to SQL, и удалите строку "Настройка приложения" на вкладке "Настройки".

  • Перестроить. Вы все сделали, теперь просто выполните проверку Find in Files, возможно, имя вашей базы данных, которое, как вам известно, было указано в строке подключения, чтобы проверить наличие каких-либо отставших, не должно быть никаких.

Ответ 5

вы можете динамически изменять строку подключения, если вы будете использовать функцию OnCreated(). Эта функция является частичной функцией и может быть реализована в отдельном файле, кроме того, где существует dbml.

Подробнее см. в этой статье.

http://aspilham.blogspot.com/2011/01/how-do-i-set-connection-string-in-linq.html