Visual Studio2012MVC4アプリを作成しました。プロジェクトを右クリックして公開を選択することにより、「公開」機能をテストしています。ここの指示に従いました。リモートWebサーバーに接続でき、何らかの理由でコンテンツフォルダーを除いて、フォルダーが正しいフォルダーに公開されます。
リモートWebサーバーへの参照を実行すると、ログインを求めるプロンプトが表示されるため、アプリが機能します。ただし、移行は発生しませんでした。作成されるテーブルはsimplemembershipテーブルだけなので、Webサーバーがリモートデータベースサーバーに接続していることがわかります。他のテーブルは作成されず、シードメソッドは実行されません。ロールとデフォルトユーザーをシードします。
「コードの最初の移行を実行する(アプリケーションの起動時に実行する)」という公開設定のチェックボックスをオンにしました
ローカルテスト用のlocaldb接続文字列ではすべて正常に機能します。ライブサイトに公開するときに、既存の移行とシードからデータベースを作成する方法がわかりません。シードは1回だけであることに注意してください。再度実行する移行を指定する方法はありますか?移行をコピーしてデータベースサーバーで実行できますが、なぜ余分な手順を実行するのですか?
編集:database.setinilizerをコンテキストに追加すると、userprofileテーブルの一部のフィールドが存在しないというエラーが表示されるようになりました。単純なメンバーシップを使用しています。このエラーは、Web公開後の最初のページの読み込み時に発生し、その後、ページの読み込みを続行するとエラーが発生します。「WebSecurity.InitializeDatabaseConnection」メソッドは1回だけ呼び出すことができます。
ただし、simplemembershipテーブルは作成されますが、他のすべてのテーブルへの移行は実行されないため、追加のユーザープロファイルフィールドがありません。
編集: 基本的に、WebSecurity.InitializeDatabaseConnectionを呼び出す前に、Webセキュリティが初期化されているかどうかを確認していないため、この問題は解決しました。今、私はそれを部分的に機能させています。アプリはsimplemembershipテーブルを正常に作成しますが、UserProfileテーブルにテーブルを追加したため、変更するまでシードできません。その代わりに、手動でuserprofileテーブルを作成し、アプリに残りのテーブルを作成させます。次に、最初の移行でuserprofileテーブルをコメントアウトします。この後、サインインすると、残りのテーブルが作成されます。
未解決の問題は、simplemembershipの初期化の前にデータベースの移行を実行する方法です。