1

私は現在、同じ SQL Server 2008 R2 データベースの複数のインスタンスを必要とする ASP.NET MVC 2 プロジェクトに取り組んでいます (1 つは SQL レプリケーションを使用して本番環境にあり、その他は開発版であり、スキーマの更新とアプリケーションのテストをローカルで行う前に行うことができます)。実動リリース、SQL レプリケーションがオンになっている 1 つのインスタンスと、オンになっていない別のインスタンス)。

現在、生産活動を妨げることなくジョブを実行するには、同じ DB の 3 つのインスタンスが必要です。

それが良い方法かどうかはわかりませんが、DBのインスタンスを変更する方法は次のとおりです。

  1. web.config に移動し、アクティブな DB の connectionString を削除します
  2. 現在の Database.edmx を削除します
  3. 他のデータベースを指す新しい EDMX を作成します。
  4. XML エディタで新しい Database.edmx を開き、これを次の :
    <Property Name="rowguid" Type="uniqueidentifier" Nullable="false" />
    に置き換えます。 <Property Name="rowguid" Type="uniqueidentifier" Nullable="false" StoreGeneratedPattern="Computed"/>
  5. 展開プロジェクトをビルドする
  6. 本番サーバーまたはテストサーバーにセットアップをインストールします

これをより速く、より便利な方法で行う方法はありますか? プロジェクトで、または展開ソリューションで事前に?

4

2 に答える 2

3

はい、より良い解決策があります。それはEntityConnectionStringBuilderを使用することです。

プロバイダー、サーバー/データベース、CSDL / SSDL / MSL、セキュリティなど、接続のすべての側面を完全に制御できます。

次に、必要な切り替え情報を動的に割り当てることができます。

于 2010-11-09T03:55:07.420 に答える
0

これは部分的な解決策です... OnContextCreated メソッドで接続文字列をオーバーライドできます。したがって、次のようなことができます。

Private Sub OnContextCreated()
            Dim fi As FieldInfo = GetType(ObjectContext).GetField("_connection", BindingFlags.Instance Or BindingFlags.NonPublic)
            Dim Environment As String = "" 'pull from web.config

            'Change the connection string based on which environment you are looking at
            If Environment = "dev" Then
                fi.SetValue(Me, New EntityConnection("dev connection string"))
            ElseIf Environment = "prod" Then
                fi.SetValue(Me, New EntityConnection("prod connection string"))
            End If

        End Sub

この方法では、接続文字列が正しいデータベースを指すため、.edmx ファイルを毎回削除して再作成する必要はありません。編集する必要があるのは、rowguid 値だけです。これは、2 つの間で異なるためです。データベース。

考慮すべきもう1つのこと...エンティティフレームワークの作成/更新/削除をカスタムストアドプロシージャにマップできます。したがって、サーバー間で異なる列が 1 つまたは 2 つしかない場合は、サーバー間の列の違いを処理するカスタム ストアド プロシージャをいずれかのサーバーに配置できます。

于 2010-11-08T23:13:02.120 に答える