Как использовать пользовательский класс конфигурации для web.config с классами Linq dbml - PullRequest
1 голос
/ 10 марта 2009

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

Это работает довольно хорошо. Однако теперь я преобразовал проект для использования Linq с использованием сгенерированных классов dbml. Это замечательно, но сгенерированные классы настаивают на использовании простой строки подключения из web.config. Поскольку эти классы генерируются автоматически, я не могу просто изменить код для использования моих пользовательских классов конфигурации. Может кто-нибудь объяснить, как было бы возможно, чтобы сгенерированные классы вызывали мой пользовательский объект для получения правильной строки соединения?

Спасибо!

Ответы [ 5 ]

1 голос
/ 10 марта 2009

Альтернатива:

Элемент <connectionStrings> файла web.config может принимать атрибут configSource, который указывает имя файла XML, в котором хранятся данные для этого раздела. Я настроил это как:

 <connectionStrings configSource="connections.config" />

Поместите отдельный файл connect.config с информацией, относящейся к среде, на каждом ПК.

1 голос
/ 10 марта 2009

Лучше было бы явно указать строку подключения для конструктора DataContext. Таким образом, ваше приложение может получить правильную строку подключения с помощью вашего помощника webconfig, и тексту данных всегда можно предоставить абсолютно правильную строку подключения. Вместо того, чтобы полагаться на контекст, чтобы выбрать подходящий из веб-конфигурации.

0 голосов
/ 10 марта 2009

Вы можете просто передать строку подключения в качестве параметра конструктору вашего класса DataContext.

В этом случае просто извлеките строку подключения, как вы использовали ранее, из вашей конфигурации и передайте ее при создании DataContext.

0 голосов
/ 10 марта 2009

Похоже, вы уже получили ответ, но я подумала, что предложу это:

public MyDataContext() : 
        base(global::System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString, mappingSource)
{
    OnCreated();
}

Вы можете вручную изменить свой частичный файл класса .designer.cs и переопределить этот конструктор контекста по умолчанию своим собственным.

0 голосов
/ 10 марта 2009

У меня нет ответа, но вы, возможно, захотите взглянуть на пример приложения StockTrader от Microsoft, которое реализует службу централизованного конфигурирования, и я считаю, что использует Linq. Я давно не смотрел на это, но он может дать вам понимание, которое вы ищете.

Извините, что у меня нет прямого ответа.

...