2016-03-19 14 views
0

メインアプリケーションとクラスライブラリからEntity Framework接続文字列を取得するのに問題があります。私の主なアプリケーション(* .exe)とクラスライブラリ(Excelで使用するCOM * .dll)の両方をSQL Server CEデータベースまたはSQL Serverデータベースに接続する必要があります。接続文字列:設定ファイルからコードに変換

現時点では、configファイルに2つの 'base'接続文字列を定義しています.1つはSQL Server CE実装用、もう1つはSQL Server実装用です。これは設定ファイル(SQL Server CEまたはSQL Serverのいずれか)から適切な 'ベース'接続文字列を読み込むので、メインアプリケーションで正常に動作し、接続文字列値を調整します(例: 'data source =' for SQL SQL ServerのサーバーCEまたはデータベース名)、私は良いです。ただし、設定ファイルはライブラリを使用しているアプリケーションに依存するので、これは私のクラスライブラリではうまくいきません。したがって、私の設定ファイルの依存関係を完全に取り除きたいのですが、設定ファイルとは対照的に、コード内に接続文字列を定義しています。

次のように現在の設定ファイルの設定はなります

<add name="ConnectionCE" providerName="System.Data.SqlServerCe.4.0" connectionString="" /> 

<add name="ConnectionServer" providerName="System.Data.SqlClient" connectionString="" /> 

次のように私は、コンテキストを作成します。

私は「ConnectionCE」と「接続サーバー」の接続文字列を変換するにはどうすればよい
var context = new DbContext("name=ConnectionCE") 
//Do things with the context above here, e.g. change the connection string value. 

を私は設定ファイルに頼る必要はなく、これらをC#コードで直接(正しいプロバイダで)作成できますか?

ありがとうございます!

答えて

2

DbContext(string)コンストラクタは、名前または接続文字列を受け入れます。

コードで接続文字列を作成し、コンストラクタに渡すだけで済みます。

System.Data.SqlClient.SqlConnectionStringBuilderクラスを使用すると、SQL Serverの接続文字列を構築できます。私は、SQL Server CEの接続文字列のために、それはstring.Format()を使用することは簡単だと思います。

SQL Serverのコードは次のようになります。

​​

プロバイダは、SQL Server CEのために指定する必要があり、そのコードは次のようになります。

var conn = DbProviderFactories.GetFactory("System.Data.SqlServerCe.4.0").CreateConnection(); 
conn.ConnectionString = "DataSource = \"C:\\ExistingDBFile.db\""; 
var db = new DbContext(conn, true); 
+0

プラス1をConnectionStringBuilder – user9993

+0

に言及するためにシンプルで簡単に、ありがとう! –

+0

興味深いことに、これは私の主なアプリケーションでは、var db = new DbContext(@ "DataSource =" C:\ ExistingDBFile.db ")を設定することでうまくいきますが、私のクラスライブラリ内から全く同じコードを呼び出すと私は例外 'System.InvalidOperationExceptionを取得 - 提供されたSqlConnectionは、初期カタログまたはAttachDBFileName'を指定していません。DbContextは、(メインアプリケーションと例外を与えるクラスライブラリとは別の)外部クラスライブラリで定義されているので、メインアプリケーションで動作する場合はExcelクラスライブラリで動作しますか? –

関連する問題