0

Visual Studio2012MVC4アプリを作成しました。プロジェクトを右クリックして公開を選択することにより、「公開」機能をテストしています。ここの指示に従いました。リモートWebサーバーに接続でき、何らかの理由でコンテンツフォルダーを除いて、フォルダーが正しいフォルダーに公開されます。

リモートWebサーバーへの参照を実行すると、ログインを求めるプロンプトが表示されるため、アプリが機能します。ただし、移行は発生しませんでした。作成されるテーブルはsimplemembershipテーブルだけなので、Webサーバーがリモートデータベースサーバーに接続していることがわかります。他のテーブルは作成されず、シードメソッドは実行されません。ロールとデフォルトユーザーをシードします。

「コードの最初の移行を実行する(アプリケーションの起動時に実行する)」という公開設定のチェックボックスをオンにしました

ローカルテスト用のlocaldb接続文字列ではすべて正常に機能します。ライブサイトに公開するときに、既存の移行とシードからデータベースを作成する方法がわかりません。シードは1回だけであることに注意してください。再度実行する移行を指定する方法はありますか?移行をコピーしてデータベースサーバーで実行できますが、なぜ余分な手順を実行するのですか?

編集:database.setinilizerをコンテキストに追加すると、userprofileテーブルの一部のフィールドが存在しないというエラーが表示されるようになりました。単純なメンバーシップを使用しています。このエラーは、Web公開後の最初のページの読み込み時に発生し、その後、ページの読み込みを続行するとエラーが発生します。「WebSecurity.InitializeDatabaseConnection」メソッドは1回だけ呼び出すことができます。

ただし、simplemembershipテーブルは作成されますが、他のすべてのテーブルへの移行は実行されないため、追加のユーザープロファイルフィールドがありません。

編集: 基本的に、WebSecurity.InitializeDatabaseConnectionを呼び出す前に、Webセキュリティが初期化されているかどうかを確認していないため、この問題は解決しました。今、私はそれを部分的に機能させています。アプリはsimplemembershipテーブルを正常に作成しますが、UserProfileテーブルにテーブルを追加したため、変更するまでシードできません。その代わりに、手動でuserprofileテーブルを作成し、アプリに残りのテーブルを作成させます。次に、最初の移行でuserprofileテーブルをコメントアウトします。この後、サインインすると、残りのテーブルが作成されます。

未解決の問題は、simplemembershipの初期化の前にデータベースの移行を実行する方法です。

4

2 に答える 2

1

問題は、データベースに接続する必要があるデータにアクセスしたり、サイトから/サイト内でデータを作成したりしない限り、移行とシードが実行されないという事実のためだと思います」そして、実行する理由サイトにログインした後にサイトに移行するのは、サイトがすべてのページ、またはデータを表示するページで承認される必要があるためです。ページの例のホームページがある場合、それはへのアクセスを承認していませんこのページにデータベースから取得する必要があるデータがある場合は、移行の実行が表示される場合があります. I found this from this Deploy it to IIS、しかし、それが理由かどうかはわかりません。データがあり、このデータ アクセスに認証を必要としないホームページを閲覧している場合、移行がまだ実行されていない場合はお知らせください。

于 2013-05-11T12:13:23.207 に答える