2012-12-20 2 views
8

저는 C# 웹 프로젝트에서 사용하고있는 F # 라이브러리 프로젝트를 가지고 있습니다. Entity Framework Type Provider를 F # 프로젝트에 사용하고 Web.config에서 연결 문자열을 가져오고 싶습니다. 그러나이 작업을 수행하는 데 문제가 있습니다.Entity Framework 유형 공급자가 런타임 구성 파일을 사용하도록하려면 어떻게합니까?

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", Pluralize=true> 

는 디자인 타임에, 나는 일치하는 이름을 갖는 연결 문자열을 사용하여 F # 라이브러리 프로젝트에 App.config 파일이 필요 해요.

런타임에 C# 웹 프로젝트에서 내 F # 코드를 호출 할 때 "App.config"파일을 찾을 수 없다는 오류가 발생합니다. 이것은 놀랍습니다. 런타임시에 현재 활성화 된 구성 파일 (웹 응용 프로그램의 경우 Web.config)에서 연결 문자열을로드하는 데 단지 ConfigurationManager.ConnectionStrings을 사용하기를 기대했기 때문입니다. 그러나 이것이 사실 인 것처럼 보이지는 않습니다.

은 내가 ConfigFile 매개 변수를 추가하는 시도 :

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", ConfigFile="Web.config", Pluralize=true> 

을하지만 이것은 단지 그것이 Web.config을 찾을 수 없다는 디자인 타임에 불평했다.

그럼 F # 라이브러리 프로젝트의 App.config 파일의 이름을 Web.config으로 바꿨습니다. 그러나 나는이 해결책에 대해 불안하다. 이게 실제로 작동하는 방법인가요? 내 라이브러리 프로젝트에 web.config 파일이 있어야합니까? 명령 줄 실행 파일에서 동일한 라이브러리를 사용하려면 어떻게해야합니까? 그 환경에서 구성 파일의 이름은 AssemblyName.exe.config입니까?

다른 컨텍스트에서 다른 이름을 가질 수있는 구성 파일의 이름을 하드 코딩하도록 강요하는 것은 매우 취약하며 디자인이 좋지 않습니다. 내가 뭔가 빠졌다고 말해줘.

답변

3

당신이 겪은 이슈는 실제로 불행한 것처럼 보입니다. 나는 당신이 무언가를 놓치고 있는지 없는지 잘 모릅니다. 그러나 SqlEntityConnection documentationFooDbGetDataContext 오버로드가 있어야하며 여기서 연결 문자열은 런타임에 결정될 때 "connectionString 매개 변수가 사용될 수 있습니다"라고합니다. 아마도 그것은 당신에게 적당한 거리를 제공 할 것입니다 (즉, 직접 ConfigurationManager.ConnectionStrings의 연결 문자열을 전달하십시오).

관련 문제