VS2012 DBML Изменение строки подключения

У меня есть решение, которое содержит несколько проектов, таких как библиотека классов, веб-сайты, услуги и т. Д.

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

MySolution.ClassLibrary.DatabaseA
MySolution.ClassLibrary.DatabaseB
MySolution.ClassLibrary.DatabaseC
MySolution.Service.DatabaseA
MySolution.Service.DatabaseD

Это немного грязно, так как я дублирую строки подключения. Для целей интеграции я также добавил еще одну библиотеку классов общих компонентов, которая также имеет доступ к одним и тем же базам данных (разные таблицы). Так что теперь у меня есть 3 экземпляра одной и той же строки подключения в некоторых местах!

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

Что я действительно хотел бы, так это просто иметь версию строки подключения, не относящуюся к общему пространству имен, и просто делиться ею везде, например

MySolution.ConnectionStrings.DatabaseA
MySolution.ConnectionStrings.DatabaseB
MySolution.ConnectionStrings.DatabaseC
MySolution.ConnectionStrings.DatabaseD

Тогда я бы указывал каждому dbml на эти строки подключения и проделанную работу!

Проблема в том, что VS2012 глючит при изменении строк подключения в dbml (щелкните правой кнопкой мыши> свойства). Он путает себя между app или web.configs и Settings.settings - часто при выборе DatabaseConnectingStringA он создает новый с именем DatabaseConnectionStringA1, что очень неприятно! Он также всегда будет добавлять свое собственное пространство имен к строкам соединения, когда вы добавляете его через настройки проекта - что требуется для dbml.

У кого-нибудь есть хитрость или метод, чтобы заставить VS сделать это?

1 ответ

В конце концов я нашел решение. Это не идеально, но оно уменьшило мои строки подключения с 7 или 8 (в некоторых местах) до 4, которые я могу копировать и вставлять между всеми проектами для различных сборок отладки / выпуска / постановки.

По сути, для каждого DBML я добавил частичный класс с конструктором, который специально использует мою строку подключения:

partial class MyDataContext
{
    public MyDataContext() : base(ConfigurationManager.ConnectionStrings["Master.DatabaseA"].ConnectionString)
    {
        OnCreated();
    }
}

Затем, после загрузки файла DBML, где я мог видеть все таблицы, я щелкнул правой кнопкой мыши и выбрал свойства в фоновом режиме и изменил соединение на None.

Это означает, что Web или App Config будут искать строку подключения только "Master.DatabaseA", не ссылаясь на пространства имен проекта.

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

Другие вопросы по тегам