Entity Frameworkの - 階層化設計 - のConnectionString入れるには?
-
21-08-2019 - |
質問
私は、LINQのツーエンティティクエリが含まれている上に、リポジトリの束と私のdatalayerとしてEntity Frameworkを持つ階層化アーキテクチャを使用しています。 データ層は、次のように私はウェブサイトでサービス層とインタフェースを持って、一つのプロジェクトです。
私は私のウェブサイトは、私のエンティティモデルのためたconnectionStringを指定する責任を負うことにしたいです。私はこれを行う方法を教えてください。
私はdatalayerの内側に配置され、私のエンティティリポジトリ、に到達するためにシングルトンメソッドを使用しています。
おかげ
解決
あなたは、web.configファイルのconnectionStringsセクションにDALのアセンブリのApp.configファイルで作成された接続文字列をコピーすることができます。
あなたは、アセンブリDLL内の接続文字列を保つことができますが、ウェブサイトでそれを展開してはいけません。
あなたは全体の接続文字列をコピーする必要があります。それは次のようになります:
<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
これは、マッピングファイルが存在する場合のすべての情報が含まれている必要があります。
他のヒント
私の場合、私はL2S代わりのL2Eを使用していますが、勧告は立つべきです。私は、XMLファイルからのフィード一般化コンフィグライブラリを持っています。データコンテキストが要求される場合、すべてのデータ・オブジェクトは、次のような方法を有しています。確かに、あなたが好むならば、十分に簡単にテンプレート化することができます。
private static string _conStr = null;
private static CalendarsAndListsDataContext GetDataContext()
{
if (_conStr == null)
{
_conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString");
}
return new CalendarsAndListsDataContext(_conStr);
}
さて、最大の欠点は、接続文字列の変更は、アプリケーションの再起動を必要とされていますが、私の場合には、それは問題ではありません。