2012-05-08 6 views
1

DataContextの接続文字列に関する質問があります。私は少しこれを差別化しようとしています:DataContextクラスの接続文字列の作成

  1. データベースへの一般的な接続文字列を作成するにはどうすればいいですか?ユーザーPC \ユーザー|いくつかのデータベース...(Microsoft SQL 2008によってホストされ/管理されています)

  2. 私はそれがIDisposableであることに気付きました。だから私は複数のユーザーが私のサイトに当たっている場合、私のコードは一度に1つのインスタンスだけデータベースにアクセスすることができ、各インスタンスが廃棄されるまで待たなければならないため、

  3. F#-Interactiveで何らかの形でLINQを有効にしてそこからデータベースに接続することは可能でしょうか?私はfsiにSystem.Data dllを有効/ロードする方法を理解できません。多分私のインストールに固有のものか、それとも共通のスレッドですか? (つまり、私のインストールではwindows.base.dllも認識されません。手動でプログラム\リファレンスアセンブリから取得する必要があります)。

とにかく、私はかなり決定的

let x = new System.Data.Linq.DataContext("localhost") 

...が動作しないことを発見しました。

答えて

0

あり、実際に接続文字列を構築するための、やや一般的な方法である:

open System.Data.Common 
open System.Data.SqlClient 

let providerName = "System.Data.SqlClient" 
let factory = DbProviderFactories.GetFactory(providerName) 
let cnBuilder = factory.CreateConnectionStringBuilder() :?> SqlConnectionStringBuilder 
cnBuilder.DataSource <- "localhost" 
cnBuilder.InitialCatalog <- "MyDatabase" 
cnBuilder.IntegratedSecurity <- true 
let connStr = cnBuilder.ConnectionString 
+0

ありがとうございます。それはまさに私が探していたものです。コンピュータと人間が読めるものとの間のバッファで、私がカスタム設定ファイルに入れるかもしれないものです。 – chris

2

1)データベースへの汎用接続文字列を作成するにはどうすればよいですか?

接続文字列を構成する一般的な方法はありません。最善の方法は、接続文字列を設定(ファイルベースのデータベースであるか標準であるかにかかわらず、SQL Serverマシンの名前、認証オプションの名前)に応じて変更できる設定ファイルに保存することです。 web site with examples for most of the optionsがあります。

2)私はIDisposableであることに気付きました。だから私は複数のユーザーが私のサイトに当たっている場合、私のコードは、一度に1つのインスタンスにデータベースにアクセスすることができます[...]?

いいえ、これはどのようにDataContextが動作しないかです。 DataContextは、他のユーザーがSQLサーバーを使用できないようにするサーバーへのライブ接続を維持しません。状態(すなわち、すでに取得されているキャッシュされたエンティティ)を保持し、状態が一貫していることを確認するためにoptimistic concurrencyを使用します(トランザクションを使用して他の接続ができないようにすることができます。

3)F# - インタラクティブ[...]で何らかの形でLINQを有効にすることはできますか?

これは問題ではありません。 F#インタラクティブで#r "foo.dll"を使用してアセンブリを参照できます。 F#2.0の典型的なアプローチは、C#ツールを使用してデータコンテキストを生成し、それを参照するだけです(F#3.0の場合は型プロバイダを使用することができるため、より簡単です)。

あなたがC#でNorthwindためのSQLデータコンテキストにLINQを生成する場合は、F#インタラクティブ使用は次のようになります。

#r @"<whatever_path>\Northwind.dll" 
#r "System.Data.Linq.dll" 

open Northwind 
open Microsoft.FSharp.Linq 

let connStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=<path>\NORTHWND.MDF;" + 
       @"Integrated Security=True;User Instance=True" 

let operation() = 
    // Using 'use' to make sure it gets disposed at the end 
    use db = new NorthwindDataContext(connStr) 
    // do something with the database 
0

私のアプローチは、1つの接続文字列を持って、それをすべてのDataContext接続に使用することでした。このコードは、MyConnStringに基づいてEntityConnectionStringを構築します。

protected override MyEntities CreateObjectContext() 
    { 
     string ConnString =ConfigurationManager.ConnectionStrings["MyConnString"]; 

     string seConn = ConfigurationManager.ConnectionStrings["MyEntities"].ToString(); 

     EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder(seConn); 
     ecsb.ProviderConnectionString = ConnString; 

     EntityConnection ec = new EntityConnection(ecsb.ToString()); 

     ScheduleEntities ctx = new ScheduleEntities(ec); 

     return ctx; 

} 
関連する問題