2014-11-27 1 views
6

이 따르는 SqlDataConnection 유형 제공자를 사용하는 일반적인 방법입니다 같이SqlDataConnection 타입 제공 - 스크립트 매개 변수를 설정 데이터베이스 연결 문자열은

그러나
type dbSchema = SqlDataConnection<"Data Source=MYSERVER\INSTANCE;InitialCatalog=MyDatabase;Integrated Security=SSPI;"> 
let db = dbSchema.GetDataContext() 

우리가 우리가이 유형의 제공자를 사용하고자하는 문제 f # 데이터베이스에 대한 연결 문자열이 매개 변수로 전달되는 스크립트입니다.

는 오류를 제공하지만
let connectionString= Array.get args 1 
type dbSchema = SqlDataConnection<connectionString> 

이 작업을 수행 할 수있는 방법이 있나요 "이것은 상수 표현식 또는 유효한 사용자 정의 속성 값이 아닙니다"이 같은 그래서 내가 뭘하고 싶은입니까?

답변

9

불행히도이 작업을 수행 할 방법이 없으며 형식 공급자에 컴파일 타임 문자열이 필요합니다. 이것은 응용 프로그램을 컴파일 할 때 유형 공급자가 데이터베이스에 대한 메타 데이터를 연결 및 검색하고 컴파일러 유형을 생성 할 수 있도록하기위한 것입니다. 당신은 당신이 데이터베이스가 동일한 스키마를 가정 형태

[<Literal>] let connString = "Data Source=..." 
type dbSchema = SqlDataConnection<connString> 

에를 작성하여 리터럴 문자열로 연결 문자열을 추출하도록 선택할 수 있습니다, 그것은 GetDataContext에 매개 변수로 런타임 연결 문자열을 제공하는 것이 가능입니다

let connectionString = args.[1] 
let dbContext = dbSchema.GetDataContext(connectionString) 
1

내가 그 일을했던 방법과 같은 방법은 내가 디자인 시간 사용 (이하 "Literal"속성을 사용하여) 하드 리터럴 문자열을 가지고 데이터 컨텍스트를 가져올 때 구성에서 로컬 문자열을 사용합니다. 개발 도중 intelli-sense 속도를 높이기 위해 로컬 db 스키마 (하드 코드 된)를 사용합니다.

type private settings = AppSettings<"app.config"> 
let connString = settings.ConnectionStrings.MyConnectionString 
type dbSchema = Microsoft.FSharp.Data.TypeProviders.SqlDataConnection<initialConnectionString, Pluralize = true, LocalSchemaFile = localDbSchema , ForceUpdate = false, Timeout=timeout> 
let indexDb = dbSchema.GetDataContext(connString); 
관련 문제