2016-11-18 14 views
3

to this questionでは、接続文字列を私たちのリポジトリにプッシュすることなく、同僚との接続文字列を共有する必要があります。 F#SQL型プロバイダを使用すると、コード内の接続文字列を「ハードコード」する必要があります。答えでの回避策が有望ですが、タイププロバイダなしでdBに接続する方法はありますか?SQL型プロバイダなしでSQLデータベースに接続しますか?

私は既にdBのスキーマ/構造を知っています。私が接続できる他の方法がありますか?

+2

* F#SQL型プロバイダを使用すると、コード内で接続文字列を「ハードコード」する必要があります。*これは正しくありません。実行時にConnection Stringを渡すことができます。 – DaveShaw

+2

@DaveShaw _data_接続文字列では、実行時に渡すことができます。しかし_shape_接続文字列はソースコードの定数でなければなりません。 –

+0

実行時に接続文字列を変更するだけでいいですか、GitHubで接続文字列をpublicにしたくないのですか(設計時も実行時もありません)。接続ロジックを含むdllを作成し、repoをプッシュすることができます。型プロバイダを使用しない場合は、常にADOを使用して接続できます。 – s952163

答えて

3

一つの可能​​性はEdmxFileタイププロバイダを使用している:

#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 } 

あなたは新しい「ADO.NETエンティティデータモデル」を追加することにより、(既存のDBからか、最初から)のVisual StudioでEDMXファイルを作成することができます項目をC#プロジェクトに追加し、それをF#プロジェクトに移動します。デザイナの機能はF#プロジェクトで引き続き使用できます。

FSharp.Data.TypeProviders project内には、DBML file,SqlDataおよびSqlEntityタイプのプロバイダが存在する。後者の2つは、コンパイル時の接続文字列または名前を必要としますが、オフラインスキーマキャッシングをサポートするも必要です。したがって、キャッシュファイルをソースコントロールに追加し、接続文字列を変更することができます。あなたはプレーンなSQLを発行することに興味があるなら、見て

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

別の方法としては、「ライブ」タイプのプロバイダのいずれかを使用することなく、ソース制御MDFファイルを指すようにしますタイププロバイダのSQL Client設計時に.configファイルを指定することができます。それとは別に

、全て「非型プロバイダ」(以下、便利、より少ないタイプセーフ)標準.NETアプローチも同様に使用することができる。

  • のORM(EF、NHibernateは、Dapperの、。 ...)
    C#クラスを模倣する非慣用的な、冗長のF#が必要になることがあります
  • ADO.NET
  • ハンドコーディング(SqlDataReaderの仲間と)
  • ...
関連する問題