У нас есть настраиваемая функция 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 и файлы конфигурации будут содержать неверную, если не использовать, строку подключения, которая в лучшем случае может запутать других разработчиков.