2016-11-18 2 views
3

to this question에서 연결 문자열을 우리 저장소에 푸시하지 않고 동료와 연결 문자열을 공유해야합니다. F # SQL 형식 공급자를 사용하면 코드에서 연결 문자열을 "하드 코드"해야합니다. 대답에서 제공된 해결 방법이 유망한 경우에도 유형 공급자없이 dB에 연결하는 방법이 있습니까?SQL 형식 공급자없이 SQL 데이터베이스에 연결 하시겠습니까?

이미 dB의 스키마/구조를 알고 있습니다. 연결할 수있는 다른 방법이 있습니까? 새로운 "ADO.NET 엔터티 데이터 모델"을 추가하여

#I "../packages/FSharp.Data.TypeProviders/lib/net40" 
#r "System.Data.Entity" 
#r "FSharp.Data.TypeProviders.dll" 

open FSharp.Data.TypeProviders 

type DB = EdmxFile<"MyDB.edmx"> 

let c = new DB.Model.ModelContainer("runtimeConnectionString") 

query { for e in c.MyEntitySet do select e.Id } 

당신은 (기존 DB 또는 처음부터) 비주얼 스튜디오에서 EDMX 파일을 만들 수 있습니다

+2

* F # SQL 형식 공급자를 사용하면 코드에서 연결 문자열을 "하드 코드"하도록 강요합니다. * 이것이 사실이 아니므로 런타임에 연결 문자열을 전달할 수 있습니다. – DaveShaw

+2

@DaveShaw에서 _data_ 연결 문자열을 사용하면 런타임에 전달할 수 있습니다. 그러나 _shape_ 연결 문자열은 소스 코드에서 상수 여야합니다. –

+0

런타임에 연결 문자열을 변경하기 만하면 GitHub (디자인 타임이나 런타임은 아님)에 연결 문자열을 공개하지 않으려 고합니다. 연결 논리를 포함하는 dll을 만들 수 있으며 repo를 밀어 넣을 수 있습니다. 형식 공급자를 사용하지 않으면 항상 ADO를 통해 연결할 수 있습니다. – s952163

답변

3

하나의 가능성은 EdmxFile 유형 공급자를 사용한다 항목을 C# 프로젝트로 가져온 다음 F # 프로젝트로 옮깁니다. 디자이너 기능은 F # 프로젝트에서 계속 사용할 수 있습니다.

동일한 FSharp.Data.TypeProviders project 내에는 DBML file, SqlDataSqlEntity 유형 공급자가 있습니다. 후자의 두 경우에는 컴파일 시간 연결 문자열 또는 이름이 필요하지만 오프라인 스키마 캐싱을 지원하는 도 지원됩니다. 따라서 캐시 파일을 소스 제어에 추가 한 다음 연결 문자열을 변경할 수 있습니다.

또 다른 대안은 "라이브"타입 공급자 중 하나를 사용하지만, 소스 제어 MDF 파일을 가리 키도록하는 것입니다 : 당신이 일반 SQL 발행에 관심이보고에있는 경우

let [<Literal>] LocalMDF = 
    "Server=.\SQLExpress;AttachDbFilename=.\MyDataFile.mdf;Database=dbname;Trusted_Connection=Yes;" 

유형 공급자는 SQL Client입니다. 디자인 타임에 .config 파일을 지정할 수 있습니다. 그것과는 별도로

, 모든 "비 형 제공자 '(이하 편리하고 적은 형태 보증) 표준 .NET 접근 방식도 사용할 수 있습니다

  • 으로 ORMs (EF, NHibernate에, 단정는. ..)
    는 C# 1 클래스 해내 비 관용적 장황 F 번호를 요구할 수
  • ADO.NET
  • 핸드 코딩 (SqlDataReader 개체 및 관계)
  • ...