2012-02-16 2 views
1

Я использую Linq2Sql в VS 2010 (C# .Net 4.0) для обработки доступа к базе данных. Все это прекрасно работает.Предотвращение переопределения определенного кода конструктора Linq2Sql

Но поскольку мой DataContext находится на отдельном уровне для моего веб-приложения (уровень доступа к данным), я настроил его для использования строки подключения в вызывающих веб-приложениях web.config.

Конечный результат требует внесения одного изменения в файл конструктора Linq2Sql (DB.designer.cs), и это должно переопределить первый аргумент конструктора (который по умолчанию в строке для строки подключения к БД) и заменить его вызовом типа следующим образом:

System.Configuration.ConfigurationManager.ConnectionStrings["CS"].ConnectionString 

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

Может кто-нибудь, пожалуйста, скажите мне, могу ли я изменить настройку, чтобы предотвратить это? Или я делаю что-то с частичными классами? или, может быть, еще один способ?

ответ

2

Здесь partial methods пригодится! К счастью, LINQ2SQL DataContext загружен несколькими очень полезными. Скажите, что ваш DataContext имеет имя AutosDataContext, как в моем примере. Создайте новый класс рядом с вашим DBML и назовите его AutosDataContext. Затем заполнить его следующим образом:

public partial class AutosDataContext 
    { 
     partial void OnCreated() 
     { 
      this.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["CS"].ConnectionString; 
     } 
    } 

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

+0

Спасибо за это. Кажется, отлично работает;) – musefan