Есть ли способ загрузить существующую строку подключения для Linq to SQL из файла app.config? - PullRequest
3 голосов
/ 26 мая 2010

У меня действительно раздражающая проблема с моим проектом Linq to SQL. Когда я добавляю все в веб-проекте, все идет как положено, и я могу сказать ему использовать мою существующую строку соединения, хранящуюся в файле web.config, и код Linq извлекается непосредственно из ConfigurationManager.

Все становится безобразно, когда я перемещаю код в собственный проект. Я создал файл app.config, поместил туда строку подключения, как это было в web.config, но при попытке добавить другую таблицу в IDE вынуждает меня либо жестко кодировать строку подключения, либо создает файл настроек и помещает его туда, что добавляет новую запись в файл app.config с новым именем.

Есть ли способ сохранить мой код Linq в своем собственном проекте, но при этом все равно обращаться к моему файлу конфигурации, если среда IDE не будет жестко задавать строку подключения или создавать файл настроек? Я преобразовываю часть моего DAL для использования Linq в SQL, поэтому я хотел бы использовать существующую строку подключения, которую использует наш старый код, а также сохранить значение в общем месте и в одном месте, а не в количество пятен.

Изменение режима вручную на WebSettings вместо AppSettings работает до тех пор, пока я не попытаюсь добавить новую таблицу, а затем вернуться к жесткому кодированию значения или воссозданию файла настроек. Я также попытался переключить тип проекта на веб-проект, а затем переименовать мой app.config в web.config, и тогда все работает так, как мне бы хотелось. Я просто не уверен, есть ли какие-либо недостатки в сохранении этого в качестве веб-проекта, поскольку он действительно не является таковым. Проект содержит только код Linq to SQL и реализацию классов моего репозитория.

Мой макет проекта выглядит так

Website
-connectionString.config
-web.config (refers to connectionString.config)

Middle Tier
-Business Logic
-Repository Interfaces
-etc.

DAL
-Linq to SQL code
-Existing SPROC code
-connectionString.config (linked from the web poject)
-app.config (refers to connectionString.config)

Обновление Вот пример кода, о котором я говорю

Веб-проект

public DB() : 
        base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString, mappingSource)
{
    OnCreated();
}

Не веб-проект

public DB() : 
        base(global::SampleProject.Data.Properties.Settings.Default.SiteSqlServer, mappingSource)
{
    OnCreated();
}

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

Ответы [ 3 ]

2 голосов
/ 27 мая 2010

Я использую трюк для этого:

public partial class DataContext
{
    partial void OnCreated()
    {
        this.Connection.ConnectionString =
                     global::System.Configuration.ConfigurationManager
                     .ConnectionStrings["SQLServer"].ConnectionString;
    }
}

будет считывать строку подключения из текущего менеджера конфигурации, который (в случае веб-сайта ASP.Net) будет Web.config. Я просто добавляю это частичное определение класса в тот же проект, где определен мой dbml. Тогда любой другой проект, который использует проект dbml, просто должен определить свои строки подключения в их app.config / web.config.

1 голос
/ 05 мая 2013

вам нужно создать новый частичный класс DataContext, подобный этому

public partial class DataContext
{
    partial void OnCreated()
    {
        this.Connection.ConnectionString =       
        ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;
    } 
}

и он автоматически прочитает вашу строку подключения из файла web.config для получения более подробной информации, см. Строка соединения Linq to SQL для автоматического чтения из файла web.config

0 голосов
/ 26 мая 2010

Если вы имеете в виду: Могу ли я использовать конкретную строку подключения в Linq-2-Sql? Тогда ответ - да.

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

Если вы хотите использовать строку подключения, настроенную в вашем проекте Linq, то вы можете создать свой собственный класс «Настройки» и добавить его туда и ссылаться на него через код в своем проекте Linq.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...