Два .NET проекта, одна строка подключения к БД? - PullRequest
6 голосов
/ 24 августа 2009

У меня есть решение .NET, содержащее два проекта:

  • Проект ASP.NET MVC, «Веб-сайт»
  • Библиотека классов, 'Models'

Проект 'Модели' содержит контекст данных Linq-to-SQL вместе с несколькими частичными классами, расширяющими объекты базы данных.

Строка подключения определена в web.config проекта «Веб-сайт».

Однако проект «Модели», похоже, имеет собственный app.config, в котором соединение с базой данных определяется отдельно.

Это означает, что если строка подключения изменится, мне придется обновить оба проекта.

Есть ли способ, которым я могу централизовать строку подключения в одном месте, и при этом оба проекта используют ее?

Ответы [ 9 ]

4 голосов
/ 24 августа 2009

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

public partial class YourDataContext 
{
    partial void OnCreated()
    {
        ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["PrimaryConnectionString"];

        if (cs != null)
        {
             this.Connection.ConnectionString = cs.ConnectionString;
        }
    }
}

См. Этот вопрос для получения дополнительной информации Предпочтительный метод для строки подключения в библиотеке классов
RichardOD опубликовал ссылку на то, что, по моему мнению, лучше всего описывает нашу проблему LINQ To SQL и значение строки соединения Web.Config

2 голосов
/ 24 августа 2009

Отлично. Поместите строку подключения модели в файл Web.config и забудьте (удалите) файл конфигурации модели.

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

DataContext context = new DataContext(ConfigurationManager.ConnectionStrings["TheKey"].ConnectionString);

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

System.Configuration.DefaultSettingValueAttribute("Data Source=SERVER;Initial Catalog=XYZ;Integrated Security=True")].

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

1 голос
/ 24 августа 2009

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

0 голосов
/ 24 августа 2009

app.config в библиотеке не повлияет на работу - эти строки соединения действительно есть для дизайнера linq2sql. Нечего видеть, двигайтесь вперед, это не те дроиды, которых мы ищем. , .

0 голосов
/ 24 августа 2009

Лично я расширяю DataContext в своем репозитории, затем делаю что-то вроде:

public ContractsControlRepository()
      : base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }

Таким образом, мой репозиторий может быть создан, и я никогда не беспокоюсь о том, чтобы установить соединение или иметь дело с этим. Чтобы перейти на / из базы данных dev / live, я просто изменяю свой web.config.

0 голосов
/ 24 августа 2009

Если ваша библиотека классов моделей указана в вашем веб-приложении, вы можете просто удалить ссылку в файле App.Config и убедиться, что у вас есть нечто похожее на то, что размещено в вашей сети. конфигурации. Таким образом, когда компилятор просматривает файл web.config, он находит строку подключения, которая ему необходима для проекта MVC, и, следовательно, нет необходимости искать его в дальнейшем.

0 голосов
/ 24 августа 2009

Вам не нужна библиотека классов app.config. Просто поместите свою конфигурацию в web.config. Также, если вам нужен какой-то раздел конфигурации из библиотеки app.config, просто поместите его в web.config ConfigurationManager прочтет его оттуда.

0 голосов
/ 24 августа 2009

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

0 голосов
/ 24 августа 2009

Хорошо, я предполагаю здесь, но похоже, что оба проекта используют одинаковую строку подключения, да?

В этом случае указывайте только строку подключения в файле web.config; библиотека классов app.config не будет прочитана ASP.NET в любом случае.

...