8

既存のWebアプリケーション(Entity Framework 5を使用)をAzure Webロールに移行します。Azure WebロールのEntity Framework DbContext

データベース接続文字列をweb.configからServiceConfiguration.*.cscfgファイルに移動しています。これは、常にweb.configMyEntities探します

public partial class MyEntities : DbContext 
{ 
    public MyEntities() 
     : base("name=MyEntities") 
    { } 

    // DbSets, etc 
} 

問題は自動生成Model.Context.csファイルで、私のエンティティクラスは、次のように定義されていることです。 ServiceConfiguration.*.cscfgファイルから接続文字列を渡すことができるように、このコンストラクタをオーバーライドするにはどうすればよいですか?

私はそうのように、このクラスから派生することができます:

public class MyCloudEntities : MyEntities 
{ 
    public MyCloudEntities() 
     : base(CloudConfigurationManager.GetSetting("MyEntities")) 
    { } 
} 

をしかし、私は、コードベースにMyEntitiesのすべてのインスタンス化を変更する必要があり、それは文句を言わない、将来的にMyEntitiesを使用することから、開発者を防ぎます。

+0

azure設定ファイルに接続文字列を保存するのはなぜですか?実行時に接続文字列を変更する必要がありますか? – Fore

+2

いいえ、接続文字列は環境ごとに異なります。 – davenewza

答えて

7

あなたはMyEntities

ため

"name=MyEntities" 

の代わりに、コンテキストが再作成されますので、毎回

CloudConfigurationManager.GetSetting("MyEntities") 

を使用するために、Model.Context.ttファイルを変更することができ、あなたはいつもあなたの変更を行います。この場合、他のものを変更する必要はありません。

+0

どこを変更するのですか?コンテキストファイルは自動生成されるので変更できません。答えをありがとう。 – davenewza

+1

コンテキストファイル(Model.Context.cs)は再作成されるため変更できませんが、そのファイルはテンプレートファイル(Model.Context.tt)から生成されます。 Model.Context.ttファイルをプレーンテキストファイルとして開く必要があります(VSはそのためには完璧に機能します)。 'base(" name = <#= container.Name#> ") (CloudConfigurationManager.GetSetting( "MyEntities")) 'に移動し、ファイルを保存してソリューションエクスプローラで右マウスボタンをクリックし、「Run Custom Tool」メニュー項目を見つけてクリックします。 Model.Context.csは新しい変更で再作成されます。 –

+0

テンプレートを変更したので、変更は失われません。 –

関連する問題