3

多くの関連する質問がありましたが、私が探しているものはまったく見つかりませんでした。エンティティフレームワーク、複数のedmxが接続文字列を共有することは可能ですか?

私たちは1つのデータベースを使用しており、異なるModelおよびObjectContextクラス名を持つ別々のedmxファイルが必要です。これにより、メタデータ部分だけが異なる複数の接続文字列が生成されます。私はデフォルトを持っている私のObjectContext派生クラスで

のWeb.config

<connectionStrings configSource="connectionStrings.config"></connectionStrings> 

connectionStrings.config

<connectionStrings> 

<add name="Entities" connectionString="metadata=res://*/Entity.Model.csdl| 
res://*/Entity.Model.ssdl|res://*/Entity.Model.msl; 
provider=CONNECTION STRING DATA GOES HERE"/> 

<add name="TwoEntities" connectionString="metadata=res://*/TwoEntity.TwoModel.csdl| 
res://*/TwoEntity.TwoModel.ssdl|res://*/TwoEntity.TwoModel.msl; 
provider=EXACTLY THE SAME CONNECTION STRING DATA GOES HERE"/> 

</connectionStrings> 

:今、私はこれをやってしまったために

生成されたコンストラクタ:

public Entities() 
      : base("name=Entities", "Entities") 
{ 
} 

public TwoEntities() 
      : base("name=TwoEntities", "TwoEntities") 
{ 
} 

非常にいいだろう何の.configファイルに二つの接続文字列を持っていますが、このファイルから同じ接続刺さを共有し、何とかそれぞれでのメタデータの一部を上書きすることではありませんクラス。

これを行う方法に関するご提案はありますか?

答えて

4

はい、可能ですが、設定からEF接続文字列を使用することはできません。アプリケーションで手動で接続文字列を作成する必要があります。 ObjectContextは複数のオーバーロードされたコンストラクタをサポートします。そのうちの1人がEntityConnectionを受け入れています。 EntityConnectionは、MetadataWorkspace(EFメタデータファイルから作成されたクラス)とDbConnectionから構成できます。派生コンテキストにカスタムファクトリメソッドを追加して、共有DB接続文字列からMetadataWorkspaceDbConnectionを作成し、EntityConnectionに渡すことができます。

コンストラクタの代わりにこのファクトリメソッドを使用します。 GetWorkspaceMetadataWorkspaceをメタデータセットごとに1回だけ作成し、アプリケーションの存続期間内に内部的に保管することを確認してください。その創造は時間がかかります。

関連する問題