2009-03-14 2 views
1

나는 두 개의 프로젝트가 :connectionString은 ASP.Net 3.5에 어디에 넣어야합니까?

  1. ASP.Net 3.5 웹 사이트 (프론트 엔드, UI)를
  2. VB 클래스 라이브러리 (DATAACCESS 로직) 나는 내 ConnectionString을 저장해야

나는 할 수 있도록 클래스 라이브러리에서 if를 사용합니까? 그리고 이것이 배포/게시 할 때 배치되는 위치에 어떻게 영향을 줍니까?

참고 : 내 VB 클래스의 모든 기능에 전달하지 않으려는

답변

7

DAL - LINQ, TableAdapters 등을 어떻게 구성했는지에 따라 자동으로 web.config 파일에서 찾을 수 있습니다. 디자이너를 통해 DAL을 만든 경우 클래스 라이브러리 app.config 파일에 기본 연결 문자열이 저장됩니다. app.config 파일의 연결 문자열 섹션을 web.config 파일로 복사하고 연결 문자열을 올바른 데이터베이스로 변경합니다 (DEV/QA/PROD에 별도의 web.config가 있습니다). 설계자가 생성 한 코드에는 이미 구성 파일에서 해당 코드를 검색하도록 구현 된 코드가 있으므로 사소한 작업입니다.

DAL을 손으로 코딩하고 연결 문자열을 전달해야하는 경우 web.config와 상호 작용하고 구성 값을 지연로드하는 강력한 형식의 구성 클래스를 설정하는 것이 좋습니다. 팩토리를 사용하여 DAL을 생성하고 생성자를 통해 구성 클래스를 팩토리에 삽입하여 구성 파일에서 검색된 connectionsString을 사용하여 DAL을 생성하는 방법을 알고 있어야합니다.

+0

답장을 보내 주셔서 감사합니다. 공장 사용에 관해 더 자세히 읽을 수있는 곳은 어디입니까? 그게 뭔지 모르겠다. – Kjensen

+0

고전적인 참고 자료는 Erich Gamma 외의 Design Patterns (http://en.wikipedia.org/wiki/Design_Patterns_(book))입니다. al. 팩토리는 기본적으로 객체를 사용하는 클래스에서 생성 코드를 분리하는 데 사용되는 팩토리 메소드 (참조시 링크 참조)를 포함하는 특수 클래스입니다. – tvanfosson

+0

+1. 이것은 가장 유연한 솔루션입니다. – AnthonyWJones

0

우리는 각 서버의이 Machine.config에서 우리를 유지하고 사용자 정의 DAL에이 웹 응용 프로그램의 모든 DB 상호 작용을 처리합니다.

+0

나는 호스팅 된 환경에 배포하므로 불행히도 machine.config에 액세스 할 수 없습니다. – Kjensen

0

연결 문자열 섹션의 web.config에 넣으십시오.

VB 프로젝트에서 HttpContext.Current.GetSection을 사용하여 섹션을 검색합니다.

+0

글쎄 ... Windows 응용 프로그램에서 클래스 라이브러리를 사용하려고 할 때 어떻게됩니까? connectionstring을 매개 변수로 보내지 않고도 둘 모두에서 작동하도록하는 방법이 있어야합니다. – Kjensen

+0

@Kjensen : 내 생각을 놓쳤다 고 생각합니다. 내부에서 HttpContext.Current를 사용하면 VB 프로젝트에서 아무것도 전달할 필요가 없습니다. – AnthonyWJones

+0

나는 나 자신을 분명히하지 않았다. :) 현재 프론트 엔드는 webapp이므로 vb 클래스 라이브러리 내부에서 httpcontext를 사용할 수 있습니다. 하지만 윈도우 응용 프로그램을 프론트 엔드로 사용하면 httpcontext를 사용할 수 없습니다 (분명히 사용할 수있는 http 문맥이 없으므로). – Kjensen

2

제 질문은이 작업을하기 위해 반나절을 보냈다는 것에서 비롯되었지만, 다른 데이터베이스를 사용하는 곳에 배포 할 때 잘못된 연결을 계속 유지했습니다. 내 VB 클래스 라이브러리에서 ConnectionString을을 검색하려면 ...

My.Settings.DefaultConnectionString 

를 사용하는 것을

내 문제였다.

tvanfossons의 anwer를 따른 후, 나는 단순히 (system.configuration를 참조 후) 사용할 수있는, 밖으로 좀 더 주위를 파고 발견

그것은 webapplications 및 응용 프로그램에 대한 웹 설정에 보이는
System.Configuration.ConfigurationManager.ConnectionStrings.Item("DefaultConnectionString").ConnectionString 

. Windows/클래스 라이브러리 앱용 설정.

지금은 다행하지만 기쁜 이유는 알고 있습니다. ;)

0

동료 개발자의 아이디어는 모든 연결 문자열을 데이터베이스 테이블에 저장해야한다는 것이 었습니다.

그렇게하지 마십시오. 너는 아주 멀리 가지 않을 것이다.:)

1

동일한 문제가있어서 System.Configuration.ConfigurationManager 클래스를 사용하여 Kjensen의 대답과 같은 클래스 라이브러리에서 web.config 파일에 저장된 연결 문자열을 가져 오는 것이 좋습니다. 이것은 놀라운 일이었습니다. 나는 더 많은 경험이 있다면 그 답변에 투표 할 것입니다.

이 메서드에서 제공 한 Linq2Sql 데이터 컨텍스트를 빌드하는 데 연결 문자열이 필요했습니다. 지금처럼 아래에있는 내 데이터 컨텍스트를 구축

이 (System.Configuration에 대한 참조를 추가하는 기억) -

공공 MyDataContext을() :베이스 (System.Configuration.ConfigurationManager.ConnectionStrings [ "MyConnectionString"] .ConnectionString , mappingSource)

web.config 파일에 "MyConnectionString"이 포함되어 있으면 구성 관리자가 나머지를 처리합니다.

+0

그래서 ConfigurationManager는 전역으로 정렬되어있어서 프로젝트 유형에 따라 다른 컨텍스트를 사용합니다. 웹 응용 프로그램 - web.config. 그게 맞습니까? 이러한 경우 일반적으로 권장되는 방법은 ConfigManager에 대한 참조를 추가하거나 연결 문자열을 생성자의 매개 변수로 전달하는 것입니다. –

+0

당신의 질문을 이해할 수 있는지 모르겠습니다. ConfigurationManager는 web.config (또는 프로젝트 유형에 따라 app.config)를 읽고 이해할 수있는 섹션을 제공합니다. ConfigManager를 사용하면 문자열을 생성자로 전달하는 것보다 깔끔하게 보일 수 있습니다 (구성에서 가져와야합니다.) 또는 실제로는 어쨌든 사용해야합니다. 정말 편안하다고 느끼는 지에 따라 달라집니다. 어떤 장점도 보이지 않습니다. ConfigManager 접근법을 사용하지 않는 것. –