カスタム接続文字列をエンティティ フレームワークに割り当てる方法は? デフォルトでは、エンティティ フレームワークは Web 構成ファイルまたはアプリ構成ファイルから接続文字列を読み取ります。文字列変数に接続文字列を作成し、その接続をエンティティ フレームワークに割り当てたいと考えています。そのエンティティ フレームワークは、その接続文字列から接続ブリッジを作成します。
実行時のエンティティ フレームワーク接続文字列とも言えます。
これを行う方法を教えてください。
2 に答える
Entity Framework Context は DbContext から継承します。TextTemplate ファイルを編集すると、新しいコンストラクターを追加して ConnectionString を使用できます。
開始する明らかな場所は、このあたりです (Context.tt 行 57 EF5):
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
ここで、tt は、DbContext の Base コンストラクターを呼び出すコンストラクターを生成します。これがあなたのフックです。
これを行う最も簡単な方法は、DAL で Datacontext クラスを継承する部分クラスを作成することです。このクラスには、接続文字列をクラスに渡すことを可能にし、DataContext エンティティを作成する単純なコンストラクターがあります。
私のプロジェクトとソリューションの 99% をさらに簡素化するために、データ アクセス レイヤーで作成されたカスタム構成セクションを介して静的接続文字列を読み取るパラメーターなしのコンストラクターを作成します。したがって、単に new Class() を呼び出すと、インスタンスで作成された構成で DataContext が作成されます。これにより、複数のアセンブリ、プロジェクト (およびプロジェクト タイプ) で簡単に使用できるようになり、展開と構成が非常に簡単になります。
以下は、構成ハンドラーを使用し、複数のプロジェクトをサポートする単純なクラス構造の例です。
まず、通常どおりデータ コンテキストを作成します。次に、部分クラスを作成して、それを次のように拡張します。