2016-07-11 3 views
4

私は.NET 4.6.1、Visual Studio 2015、SQL Server Developer 2016を使用しています。メインプロジェクトのweb.configにEF接続文字列を指定したいのですが私の人生にとって、私のデータアクセスプロジェクトでそれをどのように参照するかを理解できません。私はしかし、有効な接続文字列が渡されていない、ということを使用するとデータアクセスプロジェクトでweb.config接続文字列を使用

System.Configuration.ConfigurationManager 
    .ConnectionStrings["connectionStringName"].ConnectionString; 

:私は見つけることができるすべての答えは、これを使用する、ある--that this oneのように同じことを言います。代わりに、デフォルトのように見えるものを取得します。どこにでも定義された文字列がない場合、データソースは.\SQLEXPRESSに設定されています。ソリューション内のすべてのファイルをSQLEXPRESSで検索すると結果が返されないため、どこにでもハードコードされていません。

メインのweb.config(関連するビルドごとの変換を含む)から自分のデータアクセスプロジェクトに接続文字列を渡す正しい方法は何ですか?

+1

は、あなたのメインプロジェクトであなたのweb.configファイルにデータプロジェクトにアプリ/ web.configファイルかられたconnectionStringを追加しようとしたことがありますか? – scheien

+0

このブログを見ましたかhttps://msdn.microsoft.com/en-in/data/jj556606.aspx – Rahul

+0

@scheienはい、私の文字列はメインプロジェクトのweb.configにしかありません。データプロジェクトのapp.configには何もありません。 – vaindil

答えて

4

実行時に読み込まれるapp.config/web.configは、アプリケーションエントリポイントに関連付けられているconfigのみです。したがって、Webプロジェクトと、データアクセスレイヤーで動作する参照プロジェクトがあり、設定から接続文字列を読み込みたい場合は、Webプロジェクトのweb.configが使用されます。 Windowsアプリケーションやwpfなどでも同じことが言えます。アプリケーションのメインエントリポイントの設定だけが使用されます。アプリケーションが実行されると、コード内のどこからでもapp.config/web.configを参照することができますが、通常は文字列識別子を使用してこれを行います。言い換えれば

あなたはMyDA.dllにコンパイルあなたのデータアクセスでプロジェクトを持っていて、MyDA.dll.configに出力されることがあります、そのプロジェクト(これはデフォルトでは発生しません)あなたはMyDA.dll.configに持っているものではapp.config場合は無視されます実行時にファイルは読み込まれず、または.exeのエントリポイントのapp.configのみが使用されます。 Entity FrameworkののDbContextについては


あなたはコンストラクタに直接、接続文字列の名前を渡すことができます。接続文字列を取得して渡す必要はありません。したがって、各接続にweb.configに固有の一意の名前を付けます。

あなたのコードでは、その名前を使用してEntity FrameworkのDbContextを作成することができます。私の過去に

var myEntities = new MyEntities("ConnectionName1"); // MyEntities is some class that derives from DbContext 

は、私は通常、常に実行時に1つのデータベースにマップと連携DbContextを投影します。私がここで言うことは、同じDbContext型を複数の異なるデータベースを指して使用することではないということです。この場合、その名前を私のDbContextタイプにハードコードして、自分のアプリケーションがweb.configまたはapp.configにそれぞれリストされている接続名を持っていることを確認してください。あなたが本当に完全な接続要素をしたいです場合

public class MyEntities : DbContext { 
    public MyEntities() : base("ConnectionName1") {} 
} 

// calling code now never has to know about the connection 
using(var myEntities = new MyEntities()) { /* do something here */} 

別の方法としては、このようにそれを呼び出す(あなたは以下の呼び出しを作るプロジェクトでプロジェクトの参照に追加System.Configurationを参照することができます。

var connection = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionName1"]; 
var conString = connection.ConnectionString; // you can also get the provider 
var myEntities = new MyEntities(conString); 

私はこのアプローチをしばらく使用していませんが、あなたのケースでそれを使用するのは正当な理由があります。

0

サーバーエクスプローラ - >データ接続に接続しようとしましたが、プロパティが自動生成されましたか?次の試みは、ADO.Netデータモデルを追加し、Accessドライバで正しいDBを指し示すことです。設定文字列のプロバイダと同じくらい簡単かもしれません。ここで

0

は、MSDNによって与えられた簡略化した例および/または適切な方法である:

var connectionString = ConfigurationManager.ConnectionStrings["connectionStringName"].ConnectionString; 

次のような設定ファイル:

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
     <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
     </startup> 
     <connectionStrings> 
      <add name="connectionStringName" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=DatabaseName;Integrated Security=True;Pooling=False" /> 
     </connectionStrings> 
    </configuration> 

必要な名前空間:

System.Configuration 

から: https://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.connectionstrings(v=vs.110).aspx

1

どこでも定義されている文字列がない場合、データソースは。\ SQLEXPRESSに設定されています。 SQLEXPRESSのソリューション内のすべてのファイルを検索すると結果が返されないため、どこにでもハードコードされていません。

マシンの設定ファイルにハードコードされています。単純に次を追加してください:

最初の接続文字列の上にそれを削除してください。

machine.configの126行目から。\ SQLExpress接続文字列を削除することができますが、IMHOは安全な側で再生し、代わりに<clear />を使用することを好みます。

0

私が覚えている限りでは、EFを使用した場合、それはあなたがあなたのapp/web.configにその名前で接続文字列を定義する必要があり、あなたのコンテキストがMyContext命名されている場合、あなたが定義されたコンテキストの名前と一致する接続文字列を作成するので、 。自分自身でEF接続文字列(通常のADO.Net接続文字列よりもはるかに長い)を書く手間を省くには、DLL .configファイルで生成されたものをコピーしてください。

  • web.configファイル:あなたはそれを持っていたら

    、あなたはたとえば、あなたは現在のビルド構成に応じ.configファイルの一部を変更することができますWebプロジェクトに組み込まれた構成の変換機能を、使用することができます - DEVELOPMENT接続文字列を保持します。

  • web.staging.config - STAGING接続文字列でreplace変換を保持します。
  • web.release.config - RELEASE接続文字列でreplace変換を保持します。

希望します。

0
<configuration> 
    <connectionStrings> 
     <add name="CONNECTIONSTRINGNAME" connectionString="server=.; Database=YOURDATABASENAME;Integrated Security=true;" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
</configuration> 

変更独自のデータとの大文字は

関連する問題