4

Azureをいじっているだけで、Dbを機能させることができないようです。https://www.windowsazure.com/en-us/develop/net/tutorials/web-site-with-sql-database/で、次のようにweb.configを更新しました。

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      <contexts>
          <context type="DownloadThis.Models.DownloadThisDb, DownloadThisDb">
              <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion">
                  <parameters>
                      <parameter value="DownloadThisDb_DatabasePublish" />
                  </parameters>
              </databaseInitializer>
          </context>
      </contexts>
  </entityFramework>

例に示されているように、しかし私はこのエラーを受け取り続けます:

初期化文字列の形式が、インデックス0から始まる仕様に準拠していません。

私はconnectionStringをトリプルチェックしたので、そうではありません-何かアイデアはありますか?

4

3 に答える 3

8

VS2012公開ウィザードを使用して公開していると仮定すると、同じ問題が発生しました。コードで手動で配線するのではなく、公開ウィザードでコードの最初の移行を有効にすることを選択した場合は、公開設定で接続文字列を指定する必要があります。通常の接続文字列は移行の実行には使用されません。この新しい接続文字列は、この目的でのみ使用されます。移行を実行するための昇格された特権を持つアカウントを指定できるため、これは便利ですが、アプリはこのユーザーコンテキストでは実行されません。問題は、ウィザードがこの接続文字列を指定する必要性をあまり明確にしないことです。これを指定しないと、移行接続文字列がnullになり、何を理解しようとして多くの時間を費やします。

Webアプリケーション設定を公開する

コンテキストクラスの名前がFooContextだとします。慣例により、Web.configにはFooContextという名前の接続文字列があります。このウィザードを使用してコードの移行を有効にすると、ウィザードはFooContext_DatabasePublishという名前の2番目の接続文字列を作成します。これは、コードの最初の移行の実行にのみ使用されます。

MSDNのこのブログ投稿では、このプロセスについて詳しく説明しています。

于 2012-09-15T15:40:09.677 に答える
1

.タイプ文字列にが欠落していると思います。

<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion">

コード上の赤い長方形は読みづらくなります...

それでも問題が解決しない場合は、コメントを投稿してください。サンプルを作成して、あなたのサンプルと一致させ、動作させることができるかどうかを確認します...

[2012年8月15日更新]

OK-ここで何が起こっているのかはわかっていると思います...「web.configを更新してこれを使用しました:」と言って、XMLを表示しました。チュートリアルを実行したとき、に余分なXMLを入力する必要はありませんでしたweb.config。公開プロセス中に、Visual Studioの展開プロセスによってXMLが自動的に追加され、すべて「正常に機能」しました。

これがあなたの解決策です:

web.configこれらの更新を行わず に元のファイルに戻り、公開を再試行してください。

参考<entityFramework>までに、2つのファイルのセクションを次に示しweb.configます。最初はプロジェクトから、2番目はホストされたサービスからです(FTP経由で実行中のサイトに接続してダウンロードすることで取得しました)。VSプロジェクトは11964172、この投稿のSOレコード番号の後に呼び出されます。

ローカルweb.configファイル設定

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

デプロイされたweb.configファイル設定

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <contexts>
      <context type="_11963331.Models.ToDoDb, 11963331">
        <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[_11963331.Models.ToDoDb, 11963331], [_11963331.Migrations.Configuration, 11963331]], EntityFramework, PublicKeyToken=b77a5c561934e089">
          <parameters>
            <parameter value="_11963331.Models.ToDoDb_DatabasePublish" />
          </parameters>
        </databaseInitializer>
      </context>
    </contexts>
  </entityFramework>

web.configそれが、実際に入力するコードを提供するのではなく、ファイルの変更の写真を撮った理由を説明していると思います:-)

于 2012-08-15T04:34:22.240 に答える
0

この質問を参照してください。デプロイメント接続文字列を「リモート接続文字列」のままにして、「コードの最初の移行を実行する」チェックボックスをオンにすると、移行接続文字列DownloadThisDb_DatabasePublishが正しく定義されないため、この例外が発生します。展開ウィザードで接続文字列ボックスを空白のままにするのではなく、実際の接続文字列を指定するか、DownloadThisDb_DatabasePublishAzureサイト構成で指定された接続文字列を定義します。

于 2015-05-31T20:42:36.503 に答える