2016-08-24 14 views
0

コードをプッシュするときにAzureとスロット変数を使用してステージングデータベースと本番データベースを切り替えます。 2つのデータベースは常に同じです。Entity Framework 6で環境変数を使用してステージング/本番データベースを切り替える

これは、2つの方法を切り替える方法を簡略化した設定です。

のWeb.config

<connectionStrings> 
    <add name=“StagingDatabase” connectionString=“YYY” /> 
    <add name="ProductionDatabase” connectionString=“XXX” /> 
</connectionStrings> 

Constants.cs

public static DbContext getDatabase() 
    { 
     if (@Environment.GetEnvironmentVariable("isDatabaseStaging")) 
     { 
      return new StagingDatabase(); 
     } 
     else 
     { 
      return new ProductionDatabase(); 
     } 
    } 

問題は、私はDbContextを返していますので、Entity Frameworkのは、データベースのテーブルのいずれかを知らない、Code.csでありますdbContextにTableの定義がないとコンパイルしません。

Code.cs

public class useDatabases 
{ 
    public static useDatabasesResponse useDatabasesImplementation(useDatabasesRequest request) 
    { 

     using (var db = Constants.getDatabase()) 
     { 
      var table = db.Table.SingleOrDefault(a => a.id == request.id); 
      if (table == null) 
      { 
       return new useDatabasesResponse 
       { 
        message = “Table not found!“, 
        status = 200, 
       }; 
      } 

      // do more database stuff, etc.. 
     } 
    } 
} 

私も、私は彼らが同じものを使用して取得できた場合、多分それが正常に動作します、両方の私のデータベースが別々の.edmxファイルを持っていることに注意する必要がありますか?

+1

production web.config変換を行います。 https://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx – Dreamweaver

+0

私は環境変数で、実行時に使用したいデータベースに変更することができるようにする方法はありませんか?私はその機能が非常に便利だとわかります – James

+0

はい、確かに...リンクhelpulですか? – Dreamweaver

答えて

1

むしろ一つの変数に切り替えるよりも、あなただけのweb.configファイルに1れたconnectionStringを定義し、Azureの中のConnectionStringスロットの設定を行うことができます。

のWeb.Config

<connectionStrings> 
    <add name="Database" connectionString="YYY" /> 
</connectionStrings> 

Azureの設定:

Azure connectionString Settings

+0

私は愚かなような気がします、私はこの上にアプリの設定セクションを使用し、だから私はAzureのconnectionStringに値を設定するだけで、webConfigのconnectionStringは名前が同じであれば全く使われません。 – James

+0

はい、それは正しいです – Kenneth

+0

私はAzureに公開するためにweb.configのデータベースの1つにconnectionStringを設定する必要があります。それは同じ正確なconnectionStringでスロットを使用すると完全に動作しますが、別のスロットで別のスロットを使用すると正しく接続されません。続行する方法がわからない – James

関連する問題