4

さまざまな理由から、Entity Framework DB モデルの接続文字列をさまざまな .config ファイルのいずれかに保存したくありません。(新しい Entity Framework バージョン 4.1、.NET 4、および Visual Studio 2010 C# で最新かつ最高の DBContext API を使用しています。) ただし、DBContext のコード生成テンプレートは、パラメーターなしのコンストラクターを 1 つしか作成しません。(DBContext API を使用しない場合、私のエンティティ フレームワーク モデルには、必要なコンストラクターを含め、7 つの異なるコンストラクターから選択できます。)

これを行う方法を理解できる唯一の方法は、コード生成テンプレート (context.tt ファイル) を直接変更して、必要なコンストラクターを提供することでした (以下のコード例)。これは機能しますが、「難しい方法」でやっているように感じます。接続文字列を受け入れる DBContext コンストラクターを取得する正しい方法は何ですか?

    public <#=Code.Escape(container)#>(string connectionString)
        : base(connectionString)
    {
<#
        WriteLazyLoadingEnabled(container);
#>
    }

それが他の誰かを助けるかもしれない場合の最後のメモ。この方法は機能しますが、「接続文字列」が厳密には DB 接続文字列ではなく、DB 接続文字列を含む特別なエンティティ フレームワーク接続文字列であることに気付くまでに少し時間がかかりました (アプリに格納されるものと同様)。 .config ファイル)。

4

1 に答える 1

3

あなたのアプローチは、これを行うための最も正しい方法のように見えます。これが t4 テンプレートが作成された目的であり、基本的にモデル ファースト テンプレートがデフォルトで行うのと同じことを行っています。

もう 1 つの可能性は、db コンテキスト クラスpartialを作成し (デフォルトではない場合)、別の部分クラス ファイルを作成して、必要なコンストラクターを追加することです。ただし、t4 で生成されたすべてのコンテキストがこのパターンに従うようにする可能性が高いと思われるため、コード生成を活用して、質問で行った方法でこれを自動的に行うのが最善だと思います。

于 2011-09-29T15:15:44.150 に答える