1

DataContext接続文字列に関する質問がいくつかあります。これを少し区別しようと思います。

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

  2. IDisposableであることに気づきました。したがって、複数のユーザーがサイトにアクセスしている場合、コードは一度に1つのインスタンスしかデータベースにアクセスできず、各ユーザーのデータの一貫性を保つために、各インスタンスが破棄されるまで待機する必要がありますか?

  3. 万が一、F#-InteractiveでLINQを有効にして、そこからデータベースに接続することは可能ですか?System.Datadllを有効にしてfsiにロードする方法がわかりません。たぶんそれは私のインストールに固有のものですか、それとも共通のスレッドですか?(つまり、私のインストールでもwindows.base.dllが認識されません。programs\ referenceアセンブリから手動で取得する必要があります)。

とにかく、私はかなり決定的にそれを発見しました

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

...動作しません。

4

3 に答える 3

2

1)データベースへの一般的な接続文字列をどのように構築しますか?

接続文字列を作成する一般的な方法はありません。最善の方法は、接続文字列を構成ファイルに保持して、構成(SQL Serverマシンの名前、認証オプション、ファイルベースのデータベースか通常か)に応じて変更できるようにすることです。ほとんどのオプションの例が掲載されたWebサイトがあります

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

いいえ、これはどのようにDataContext機能するかではありません。はDataContext、他のユーザーによるSQLサーバーの使用をブロックするサーバーへのライブ接続を維持しません。いくつかの状態(つまり、すでに取得されているキャッシュされたエンティティ)を保持し、楽観的同時実行性を使用して、状態が一貫していることを確認します(必要に応じて、トランザクションを使用して他の接続を防ぐことができます)。

3)万が一、F#-Interactive [...]でLINQを有効にすることは可能ですか?

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

C#でLINQ to SQLデータコンテキストを生成する場合Northwind、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
于 2012-05-08T13:11:11.400 に答える
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;

}
于 2012-05-09T17:43:55.437 に答える
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
于 2012-05-08T18:23:54.287 に答える