Azure WebSiteアプリで個別の名前付きスキーマを使用して、AzureSQLで個別のスキーマパターンでマルチテナンシーを実装したいと思います。私のアプリはVisualStudioで正しく実行されますが、Azureでは実行されません。StackOverflowで同様の問題を検索したところ、次のことがわかりました。この回答は、実行できないことを示しています。WindowsAzure上のマルチテナントアプリケーション。この質問は、名前付きスキーマには直接適用されません。ローカルで実行された場合はAzure SQLデータベースが機能しますが、Azureに公開された場合は機能しません。
開発中のMVC4アプリでは、名前付きスキーマを使用するようにAzure SQLデータベースを構成し、接続文字列のログイン名とパスワードを変更しました。最初のユーザーを登録しようとすると、AzureSQLから「無効なオブジェクト名'UserProfile'」というエラーメッセージが表示されました。スタックトレースを確認したところ、すべてが妥当であるように見えたので、SimpleMembershipProviderのコードを確認しましたが、名前付きスキーマを使用したときに破損するものは見つかりませんでした。
概念実証として、Visual Studio 2012を開き、インターネットアプリケーションテンプレートを使用して.NET Framework 4.5で新しいMVC4アプリを作成しました。これは、もちろんSimpleMembershipProviderを実装しています。Azureコンソールを開き、新しいデータベースを使用して新しいWebサイトを作成し、アプリをAzureに公開しました。アプリを実行し、[登録]リンクをクリックして最初のユーザーを追加しました。これは成功し、ログアウト、ログインなどができました。
次に、新しい名前付きスキーマ、ログイン、およびユーザーを作成して、PoCアプリのAzureSQL構成を変更しました。新しいデータベースに新しいユーザーのdb_ownerロールを追加しました。ユーザーのデフォルトスキーマを変更し、最初の実行で作成されたテーブルを名前付きスキーマに転送しました。ユーザーのデフォルトスキーマが正しく、テーブルが名前付きスキーマにあることを確認しました。[公開]ダイアログの[接続文字列]セクションでユーザー名とパスワードを変更し、VisualStudioからアプリを再度公開しました。Chromeでウェブサイトを開き、[登録]リンクをクリックしました。ユーザー名とパスワードを入力すると、「無効なオブジェクト名'UserProfile'」というエラーメッセージが表示されました。最初の実行で作成したユーザーでログインしようとすると、同じエラーが発生しました。
次に何をチェックするかについてのアイデアを探しています。この問題を回避することはできますが、簡単なことを見逃した場合は、効率的な方法で修正したいと思います。何か案は?