3

Azure の 90 日間無料試用版を試しています。Web サイトを展開/公開してデータベースを作成するのは非常に簡単ですが、何らかの理由でデータベースにテーブルが作成されません。私はエンティティフレームワーク4.4(私は信じています)とコードファーストの移行を使用しています。Azure は独自の接続文字列を使用することを読みましたが、先に進んで接続文字列も変更しました。これに何時間も費やしましたが、何が問題なのか、テーブルが作成されない理由がわかりません。ウェブサイトをデプロイし、移行を有効にし、移行を追加し、データベースを更新してから、コード ファーストのチェックボックスをオンにして公開します。私の接続文字列が間違っているのでしょうか?どんな助けでも大歓迎です。

「MyProject.Web」web.config:

<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;" />
</connectionStrings>

次に、「MyProject.Data」app.config で、私の datacontext.cs が保持されます。

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<contexts>
  <context type="SeluCmpsTutorials.Data.DataContext">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion">
      <parameters>
        <parameter value="slutips_db"/>
      </parameters>
    </databaseInitializer>
  </context>
</contexts>
</entityFramework>
  • また、すべての接続文字列が変更されているにもかかわらず、add-migration と update-database を実行すると、まだ ./sqlexpress ローカル データベースを使用していることに気付きました。
4

7 に答える 7

3

SQL azure接続に関して注意すべき重要な問題:ユーザーIDの場合、実際には通常、ユーザーID @サーバー名である必要があります-接続文字列でyouruserid@n98my***を読み取ります。

また、「tcp:」(使用しない) が必要かどうかも不明で、providerName="System.Data.SqlClient" を追加することもできます。

于 2012-10-18T18:05:59.823 に答える
2

あなたの db ユーザーは、データベースの変更に必要な権限を持っていますか? ユーザーをどのように設定しましたか?

最初に、Azure sql サーバーのログインを次のように作成する必要があります: (サーバー マスター データベースで次の sql を実行し、山かっこの値を実際の値に置き換えます)

CREATE LOGIN [<SomeServerLogin>] WITH PASSWORD=N'<somepassword>'

次に、管理者として slutips_db データベースに接続し、次の sql を実行します。

CREATE USER [<slutips_db_user>] FROM LOGIN [<SomeServerLogin>];
GO;
EXEC sp_addrolemember 'dbmanager', '<slutips_db_user>';
GO;
EXEC sp_addrolemember 'loginmanager', '<slutips_db_user>';
GO;

「dbmanager」ロールにより、テーブルの作成\管理が可能になります。

「loginmanager」ロールにより、現在のデータベースで別のユーザーを作成できます (slutips_db_user はCREATE USER <slutips_db_user1> FROM LOGIN <SomeServerLogin1>句を実行できます)

Edit1: また、接続文字列ユーザーが user@n98my*** (user@server) 形式であることを確認してください。

于 2012-10-17T07:32:52.357 に答える
0

このチュートリアルに従う場合: https ://www.windowsazure.com/en-us/develop/net/tutorials/web-site-with-sql-database/ Visual Studio(2012年のたとえば、Azureで他の方法で機能するかどうかはわかりません)-基本的には、ポータルにログインして、公開資格情報をダウンロードします。これにはデータベース接続文字列が含まれ、これを使用してコードの最初の移行をAzureにプッシュできます。

行ったように見えることは、プロパティでapp.configに手動で追加されます。公開が機能する方法では、次のように.configファイルにローカルバージョンを定義します。

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

次に、公開すると、VSは必要なものを自動的に.configに挿入します-WebサイトにFTPでアクセスして、生成された.configファイルを見ると、次のように表示されます。

<contexts>
  <context type="Web_App.Models.TrackSafeDb, Web App">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Web_App.Models.TrackSafeDb, Web App], [Web_App.Migrations.Configuration, Web App]], EntityFramework, PublicKeyToken=*******************">
      <parameters>
        <parameter value="Web_App.Models.TrackSafeDb_DatabasePublish" />
      </parameters>
    </databaseInitializer>
  </context>
</contexts>

だから私はあなたのローカルapp.configから余分なものを削除して再公開してみます

于 2012-11-14T04:40:05.703 に答える
0

接続文字列に暗号化を追加してみてください...

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;Integrated Security=False;Persist Security Info=True;Encrypt=True" />
</connectionStrings>
于 2013-11-13T23:51:45.303 に答える
0

この質問を数日間見た後、いくつかの考えが浮かびました。まず、コンテキストの名前は実際には DefaultConnection です。Entity Framework (パラメーターなしのコンストラクターで使用するため) は、接続文字列名がコンテキストの名前と一致することを好みます。

たとえば、新しいコンテキスト変数を次のように宣言するとします。

var context = new MyEntities();

次に、接続文字列を呼び出す必要がありますMyEntities

<connectionStrings>
<add name="MyEntities" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;" />
</connectionStrings>

次に、web.config 変換ファイルがないこと、および/またはそれらのファイルの接続文字列も適切に更新したことを 100% 確信していますか?

第 3 に、デプロイ時に、web.config 以外の構成ファイルは基本的に無視されることに注意してください。実行中のアセンブリは Web アプリケーションであり、データ プロジェクトやその他のものではありません。EF のセットアップと展開に関連するすべての構成は、web.config ファイルに配置する必要があります (データ app.config にあるスニペットのように)。

于 2013-11-20T18:33:21.820 に答える
0

まったく同じ問題があり、「%」文字を含むパスワードにリンクされていました。結果として得られた web.config を Azure で ftp に接続して確認すると、パスワードの '95%a' を含む部分が '95ª' に変わりました ... 自動的に。これは、azure の Web 展開機能のバグである可能性があります。これは、ローカルの公開プロファイルでパスワードが正しかったためです。

DB への結果のパスワードが結果の接続文字列で実際に破損している場合は、それをリセットする必要があります。

  • Windows Azure Management の SQL DATABASES タブで、SERVERS リスト (DATABASE リストではない) を選択し、サーバーをクリックします。
  • ダッシュボードには、管理者パスワードをリセットするためのリンクがあります
  • Visual Studio で、発行プロファイルの connectionString (設定、データベース) のパスワードを更新します。
  • web.config (コメントではなく実際のもの) を変更しないと、再公開されません
  • 公開し、データベースの最初の使用時に移行が適用されます
于 2013-12-29T12:02:39.510 に答える