2009-05-13 13 views
7

Linq-To-Entitiesクエリを含む一番上のリポジトリを持つデータレイヤーとしてEntity Frameworkを使用する階層化アーキテクチャを使用しています。 データレイヤーは1つのプロジェクトです。その横に、サービスレイヤーとインターフェイス(ウェブサイト)があります。エンティティフレームワーク - レイヤードデザイン - 接続文字列の配置場所

自分のエンティティモデルに接続文字列を指定する責任が自分のウェブサイトにありますようにします。これはどうすればいいですか?

データレイヤー内にあるエンティティリポジトリにアクセスするには、シングルトンメソッドを使用しています。

おかげで私の場合は

答えて

9

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

アセンブリ文字列に接続文字列を保存できますが、Webサイトには展開しないでください。

接続文字列全体をコピーする必要があります。

<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" /> 

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

+0

私のエンティティモデルを作り直してみました。 – Peter

3

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

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

    return new CalendarsAndListsDataContext(_conStr); 
} 

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

+0

私は、追加プロジェクトで構成をどのように分離するかというアイデアが気に入っています。しかし、このアプリケーションでは、私は自分のウェブサイトがコネクションストリングを担当したいと思っています。 – Peter

+0

あなたのCofiguration Layerは読み込み専用でなければならない理由はありません。あなたはそれを読み書き可能にすることができます。そうすれば、COnfigurationLibrary.Config.AddSetting( "ConnectionString"、 "MyString")のようなことができます。それでもあなたのウェブサイトは接続文字列を駆動する可能性があります。 – Serapth