Строка подключения ад в .NET / LINQ-SQL / ASP.NET - PullRequest
28 голосов
/ 25 октября 2008

У меня есть веб-приложение, которое содержит следующее:

  • Веб-проект (с файлом web.config, содержащим строку подключения, но без кода доступа к данным в веб-проекте)
  • Проект доступа к данным, использующий классы LINQ-SQL для предоставления сущностей пользовательскому интерфейсу веб-проекта (в этом проекте есть файл настроек и app.config - оба из которых имеют строки подключения)

При сборке и развертывании в каталоге Bin отсутствует файл настроек или app.config с доступом к данным .dll, но изменение строки подключения в файле web.config не приводит к соответствующему изменению базы данных - поэтому Строка подключения должна быть скомпилирована в DLL доступа к данным.

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

Как мне лучше разрешить этот беспорядок?

Спасибо за любую помощь.

Ответы [ 13 ]

0 голосов
/ 25 октября 2008

В идеальном мире, я думаю, вы бы провели рефакторинг своего уровня данных, чтобы подобрать параметры конфигурации через System.Configuration или соответствующие конструкторы / фабрики. Это означает, что вам нужно либо перепрограммировать его неявный источник конфигурации, либо явно установить соединения от его хоста / потребителя. Другим связанным шаблоном для централизации этих типов констант является добавление свойства readonly в статический вспомогательный класс, чтобы этот класс управлял фактическим разрешением из конфигов и т. Д.

Одним из мест, где вы можете найти хорошие примеры элегантного выполнения этой задачи, является NHibernate и управление его конфигурацией / отображениями. Конечно, это что-то вроде адского XML, и Fluent NHib более пристрастен, но большинство реальных примеров покажут вам, как согласовать конфигурацию из вспомогательной сборки с исполняющей сборкой.

0 голосов
/ 25 октября 2008

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

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

0 голосов
/ 25 октября 2008

Как насчет определения объекта ConnectionFactory, который принимает перечисление в качестве параметра и возвращает полностью сформированный объект соединения?

...