2009-03-14 2 views
1

У меня есть два проекта:Где я должен установить myStringString в ASP.Net 3.5?

  1. ASP.Net 3.5 веб-сайт (интерфейс, UI)
  2. Библиотека классов VB (DATAACCESS логика)

Где я должен сохранить свою ConnectionString, так что я могу использовать, если из библиотеки классов? И как это влияет на то, где оно размещается при развертывании/публикации?

Примечание:

  1. Я не хочу, чтобы передать его в каждой функции в моем VB класса

ответ

7

В зависимости от того, как вы создали свои DAL-LINQ, TableAdapters и т. Д., Он может автоматически искать его в файле web.config. Если вы создали DAL через конструктор, вероятно, он сохранит строку подключения по умолчанию в файле app.config для вашей библиотеки классов. Я скопирую раздел строки подключения из файла app.config в свой web.config и изменим строку подключения на правильную базу данных (у меня есть отдельный файл web.config для DEV/QA/PROD). Это делает его тривиальным, поскольку код, созданный разработчиком, уже имеет реализованный код для извлечения из файла конфигурации.

Если вы вручную кодируете свой DAL и должны проходить в строке подключения, я предлагаю настроить строго типизированный класс конфигурации, который взаимодействует с web.config и выполняет ленивую загрузку ваших значений конфигурации. Используйте фабрику для создания DAL и введите класс конфигурации на свой завод через конструктор, чтобы он знал, как создать свой DAL с помощью connectString, извлеченного из файла конфигурации.

+0

Благодарим вас за ответ. Где я могу узнать больше об использовании фабрики? Я не знаю, что это (краснеть). – Kjensen

+0

Классическая ссылка - это образцы дизайна (http://en.wikipedia.org/wiki/Design_Patterns_(book)) Эриха Гамма и др. и др. Фабрика в основном представляет собой специализированный класс, который содержит заводские методы (см. Ссылку по ссылке), которые используются для развязки кода создания из классов, использующих объекты. – tvanfosson

+0

+1. Это наиболее гибкое решение. – AnthonyWJones

0

Мы держим наши в machine.config каждого сервера и иметь пользовательские DAL к обрабатывать все взаимодействия с БД для наших веб-приложений.

+0

Я развертываю в размещенную среду, к сожалению, нет доступа к machine.config – Kjensen

0

Поместите его в файл web.config в разделе строк подключения.

В проекте VB используйте HttpContext.Current.GetSection для извлечения раздела.

+0

Ну .. Что же тогда, когда я хочу использовать библиотеку классов из приложения Windows? Должен быть способ заставить его работать для обоих без отправки connectionstring в качестве параметра? – Kjensen

+0

@ Kjensen: Я думаю, вы пропустили мою мысль. Вы должны использовать HttpContext.Current изнутри проекта VB, нет необходимости передавать что-либо вокруг в качестве параметра. – AnthonyWJones

+0

Я не прояснился. :) Текущий интерфейс - webapp, поэтому я могу использовать httpcontext из библиотеки классов vb. Но если я поместил приложение windows в качестве интерфейса, я не могу использовать httpcontext (поскольку явно не доступен http-контекст). – Kjensen

2

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

Моя проблема была, что я использовал

My.Settings.DefaultConnectionString 

... Чтобы получить ConnectionString в моей VB библиотеки классов.

Выполнив tvanfossons Anwer, я порылся еще немного, и выяснилось, что я могу просто использовать (после ссылки System.Configuration):

System.Configuration.ConfigurationManager.ConnectionStrings.Item("DefaultConnectionString").ConnectionString 

Он смотрит в веб-конфигурации для webapplications и приложения. config для приложений Windows/библиотеки классов.

Я рад, что теперь это работает, но еще более радует, что я знаю почему. ;)

0

Одна идея разработчиков заключалась в том, что мы должны хранить все строки подключения в таблице базы данных.

Не пытайтесь это сделать. Вы не дойдете слишком далеко.:)

1

У меня была та же проблема, с которой вы столкнулись, и я закончил работу с классом System.Configuration.ConfigurationManager, чтобы получить строку подключения, хранящуюся в моем файле web.config, из моей библиотеки классов, например, предложенный Kjensen ответ. Это сработало чудеса, если бы у меня было больше опыта, я бы проголосовал за этот ответ.

Мне нужна строка подключения для создания моего Linq2Sql-данных, который предоставил мне этот метод.

Теперь я строю свой контекст данных, как показано ниже (не забыв добавить ссылку на System.Configuration) -

общественного MyDataContext(): основание (System.Configuration.ConfigurationManager.ConnectionStrings [ "MyConnectionString"] .ConnectionString , mappingSource)

И до тех пор, пока файл web.config содержит «MyConnectionString», менеджер конфигурации заботится обо всем остальном.

+0

Таким образом, ConfigurationManager является своего рода глобальным, так что он использует разные контексты в зависимости от типа проекта. В webApp - web.config. Это правильно? Что обычно рекомендуется в этих случаях, добавить ссылку на ConfigManager или каким-либо образом передать строку соединения в качестве параметра в конструкторе? –

+0

Я не уверен, что я понимаю ваш вопрос, ConfigurationManager из того, что я понимаю, будет читать web.config (или app.config в зависимости от типа проекта) и предоставить вам соответствующие разделы, если они существуют. Использование ConfigManager для меня кажется более чистым, чем передача строки в качестве конструктора (который вы должны получить от Configuration [или, по крайней мере, СЛЕДУЕТ]) в любом случае), это действительно зависит от того, с чем вы чувствуете себя комфортно, я думаю, я не вижу никаких преимуществ чтобы не использовать подход ConfigManager. –

Смежные вопросы