既存の製品で VS2012 データベース プロジェクトを立ち上げて実行しようとしています。データベースをスキーマ比較して、新しいデータベース プロジェクトにデータを入力したところ、すべて問題ないように見えました。Visual Studio で正常にデプロイされているように見えますが、エラーはありませんが、新しくデプロイしたデータベースに対してアプリを実行しようとすると、次のエラーが発生します。
ログインで要求されたデータベース "my_database" を開けません。ログインに失敗しました。
これを広範囲に調べたところ、理解できない奇妙な動作が見つかりました。データベースをデプロイした後に次の sql を実行すると、すべてが機能し始めます。
DROP SCHEMA [my_app_user]
GO
DROP USER [my_app_user]
GO
CREATE SCHEMA [my_app_user]
GO
CREATE USER [my_app_user] FOR LOGIN [my_app_user] WITH DEFAULT_SCHEMA=[my_app_user]
GO
ALTER ROLE [my_app_role] ADD MEMBER [my_app_user];
GO
奇妙なことに、このコードは私のデータベース プロジェクトにもあり、ドロップ ステートメントを除いて表示されているとおりです。展開するとこれらすべてが作成されますが、機能しません。別の奇妙な動作は、Sql Server Management Studio 2012 でユーザーのログインを開いて、ログインのユーザー マッピングを確認すると、マップされていないことです。データベースのチェックボックスをオンにすると、すべて問題ないように見えますが、[OK] をクリックして同じウィンドウに戻ると、再びチェックされません。上記のスクリプトを実行すると、[ユーザー マッピング] ウィンドウの見栄えが良くなります。
更新: login/schema/user の create ステートメントと role の alter ステートメントを、データベース プロジェクトで使用される配置後のスクリプトに移動したところ、問題なくデータベースに公開されました。ただし、データベース プロジェクトは、展開後とは対照的に、これらのステートメントをスキーマの残りの部分に入れたいと考えているようです。
ここで何が起こっていますか? これを修正するにはどうすればよいですか? 助けてくれてありがとう!!