5

現在、web.configファイルにconnectionStringが格納されている、Entity Framework Code-FirstマイグレーションとWeb Publishを使用するプロジェクトがあります。Web公開外部connectionStrings.configファイルを使用したコード一次移行

web.configの外でconnectionStringsを移動する時間が来ています。そのため、connectionString.configファイルに入れて、slowcheetahでwebpublishに変換してください。

connectionStrings.config

<connectionStrings> 
    <!-- Testing Databases --> 
    <add 
     connectionString="server=testserver;database=testdatabasename;user id=someid;password=*******" 
     name="dbname" 
     providerName="System.Data.SqlClient" 
    /> 
</connectionStrings> 

web.configの関連セクションIは、(ビルド - >プロジェクトを公開)の公開Web用のダイアログボックスをロード今

<connectionStrings configSource="config\connectionStrings.config"> 
    </connectionStrings> 

設定]タブで、Iエラーを受け取る

No Databases found in the project 

これは、ダイアログボックスがインテリジェントではないことを示していますconfigSourceを見てそこからデータを読み込むのは大変です。 connectionStringsが開発環境に正しくロードされていることを確認できます。また、slowcheetahが設定を本番環境に適切に変換していることも確認できます。

Visual Studio Publishに自分の設定が表示され、コードを最初にマイグレーションできるようにする方法はありますか?

+0

[This(http://stackoverflow.com/questions/16733042/publishing-external-configuration-files-in-asp-net-mvc-project-using-visual-stud)はあなたに役立つかもしれません。 –

+0

@Siva残念ながらそれは問題ではありません。他の設定ファイルはうまく展開されています。これは、Visual Studio側の問題です:( –

+0

私はVS2013でもそれを複製することができますが、VS 2015 CTPで全く同じ問題を抱えています。外部ConnString.configファイルを使用すると、接続文字列が[Web公開]ダイアログボックスで選択されていないため、コード一次移行を使用できません。これは誰かが回避策を見つけましたか? –

答えて

3

Visual Studio 2013 Update 4を使用し、connectionStringsのconfigSource属性を使用して同様の共有メソッドを使用して、.NET 4.5の下の公開プロジェクトとは別のプロジェクトでEntity Framework 6のコードを使用する場合も同じ問題が発生しました。

これは、完全な嵐のビットが発生するため、これらの詳細を記載します。私はいくつかのバグに遭遇し、いくつかの異なる方法でハックしなければなりませんでした(EF blog they know it's a mess and are re-factoring their approach)。

パブリッシュウィザードはconfigSourceを理解していないようですので、空の要素を残してweb.config内のconectionStringsを削除しました(これを削除することもできます)。完全にしかし私は、既存の空の要素が好ましくはコメント付きであると感じました)。ローカルで動作させるために、接続ファクトリを追加してデバッグモード(ローカル)で動作させ、パブリッシュウィザードでdbの移行を検出させるようにしました。私はfactoryを使用しています。なぜなら、connectionStringは常にファクトリに取って代わり、変換を行う前にプロジェクトを動作させるためには、それを悪用する必要があります。また、dbcontextコンストラクタに渡す文字列 "connectionStringOrDatabaseName"が接続文字列とデータベース名の両方であることを確認します(ファクトリ生成dbを接続文字列dbと一致させます)。

これでデータベースが見つかり、ローカルで動作しますが、実際にはsharedConfigを使用していません(したがって、公開時には必ずしも機能しません)。これを解決するために、xsdへのweb.configトランスフォームを使用しました。空の/欠落しているconnectionStrings要素を、configSourceを使用して置換/挿入します。今公開しようとすると、invalid connectionStrings element is producedという問題が発生します。

私はこの問題の解決方法を直接見つけることができませんでしたので、別の回避策を採用する必要がありました。created a custom transformation別名xsd:configSource属性を指定すると、もう一方のファイルに1つ、私は実装を読者に練習として残します。

関連する問題