Entity Framework - 階層化設計 - 接続文字列を配置する場所

c# data-access-layer entity-framework n-tier

質問

私はLinq-To-Entitiesクエリを含むたくさんのリポジトリを一番上に持つ私のデータレイヤとしてEntity Frameworkを使った階層化アーキテクチャを使っています。データ層は、私がサービス層とウェブサイトであるインターフェースを持っていることの隣にある一つのプロジェクトです。

私のWebサイトに、私のエンティティモデルの接続文字列を指定する責任があるようにします。これをどうやってやるの?

データ層の内側にあるエンティティリポジトリに到達するためにシングルトンメソッドを使用しています。

ありがとう

受け入れられた回答

DALアセンブリのApp.Configで作成された接続文字列をweb.configのconnectionStringsセクションにコピーできます。

あなたはアセンブリDLLの接続文字列を維持することはできますが、あなたはそれをウェブサイトと一緒にデプロイするべきではありません。

接続文字列全体をコピーする必要があります。これは次のようになります。

<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

マッピングファイルが存在する場所に関するすべての情報が含まれているはずです。


人気のある回答

私の場合は、L2Eの代わりにL2Sを使用していますが、推奨事項は当てはまるはずです。私はXMLファイルからフィードする汎用のConfigライブラリを持っています。データコンテキストが必要な場合は、すべてのデータオブジェクトに次のようなメソッドがあります。お望みであれば、それは十分に簡単にテンプレート化することができます。

private static string _conStr = null;
private static CalendarsAndListsDataContext GetDataContext()
{
    if (_conStr == null)
    {
        _conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString");
    }

    return new CalendarsAndListsDataContext(_conStr);
}

最大の欠点は、接続文字列を変更するとアプリケーションの再起動が必要になることですが、私の場合、これは問題になりません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ