Я прочитал статью Рика Страля о способах работы с контекстом данных. Мой DBML находится внутри библиотеки классов, я держу свой контекст данных открытым, создавая статический метод Current в отдельном настраиваемом частичном классе внутри библиотеки.
public partial class DataContext
{
public static DataContext Current
{
get
{
DataContext dc = HttpContext.Current.Items["dc"] as DataContext;
if (dc == null)
{
dc = new ImmediacyPageDataContext();
HttpContext.Current.Items["dc"] = dc;
}
return dc;
}
}
тогда получите к нему доступ вот так
DataContext dc = DataContext.Current;
Однако это вызывает проблемы всякий раз, когда я обновляю свой файл DBML. После редактирования файла DBML каждый раз, когда я пытаюсь построить проект, мой дизайнерский файл не восстанавливается / удаляется. Если я попытаюсь запустить опцию пользовательского инструмента, он вернется с ошибкой.
Единственный способ обойти это - переименовать или удалить пользовательский частичный класс, заново сгенерировать файл конструктора, а затем добавить свой собственный частичный класс обратно в решение. Это действительно работает, но ... это немного больно.
Есть ли лучший подход, который облегчит редактирование моих файлов DBML, при этом продлевая мой DC как можно дольше?