У нас есть настраиваемая функция AppSettings.GetConnectionString(), которая всегда вызывается для определения строки подключения, которая должна использоваться. Как эта функция работает, не имеет значения для обсуждения. Достаточно сказать, что он возвращает строку подключения, и я должен ее использовать.
Я хочу, чтобы мой LINQ to SQL DataContext использовал это, поэтому я удалил всю информацию из строки данных из файла dbml и создал неполный класс со стандартным конструктором, подобным этому:
public partial class SampleDataContext
{
public SampleDataContext() : base(AppSettings.GetConnectionString()) { }
}
Это отлично работает, пока я не использую конструктор для перетаскивания таблицы в диаграмму. Акт перетаскивания таблицы на диаграмму сделает несколько нежелательных вещей:
- Будет создан файл настроек
- Будет создан файл app.config
- В моем файле dbml будет встроена строка подключения
Все это делается до того, как я даже сохраню файл!
Когда я сохраняю диаграмму, файл конструктора воссоздается, и он будет содержать свой собственный конструктор по умолчанию, который использует неправильную строку соединения. Конечно, это означает, что у моего DataContext теперь есть два конструктора по умолчанию, и я больше не могу их строить!
Я могу отменить все эти плохие вещи, но это раздражает. Мне нужно вручную удалить строку подключения и новые файлы после каждого изменения!
В любом случае я могу остановить конструктора от внесения этих изменений без запроса?
ИЗМЕНИТЬ
Требование использовать метод AppSettings.GetConnectionString() было наложено на меня довольно поздно в игре. Я использовал что-то очень похожее на то, что он порождает для меня. Существует довольно много мест, которые вызывают конструктор по умолчанию. Я знаю, что я мог бы изменить их все, чтобы создать контекст данных по-другому (используя другой конструктор, статический метод, factory, ect..). Такое изменение было бы лишь немного раздражающим, поскольку это нужно было бы сделать только один раз. Тем не менее, я чувствую, что это обходит реальную проблему. Файл dbml и файлы конфигурации будут содержать неверную, если не использовать, строку подключения, которая в лучшем случае может запутать других разработчиков.