背景
- チュートリアル: ASP.NET Core で Web API を作成するをやった
- "UseInMemoryDatabase"だとPC再起動でデータが消えてしまう
- 次のステップとして、SQL Serverに保存してみよう
- そうすればPC再起動してもデータは残る
SQL Server 2019をインストールした
- ここで「既定のインスタンス」と「名前付きインスタンス」を選択するところがある
- ずっと「規定のインスタンス」かつLocalDBにして作業していた
- IIS EXPRESSではうまくいく。だけど。IIS(本番)にしたらエラー続出
- SQL Serverのエラーコードは主に50と26
- SSMSでログイン権限を変えてみたり、IIS ManagerでAppPoolのIDをいじってみたりしたけど、むりぽ。
SQL Serverを再インストールした
最後はできた!
VS2019のプロジェクトにSQLEXPRESSを追加し、PSでコマンドをうつ!
PoworShell
Add-Migration Initial
Update-Database
すると勝手に空だったtestDbにテーブルができている!
appsettings.json
"ConnectionStrings": {
"WorkContext": "Data Source=.\\SQLEXPRESS;Initial Catalog=testDb;Integrated Security=True"
ずっと苦戦してたlocalDb時代のはこれ↓
"WorkContext": "Server=(localdb)\\mssqllocaldb;Database=WorkContext-2;Trusted_Connection=True;"
}
データソースだとかサーバだとか、カタログだとか、、、同じものを違う言葉で言ってるだけなように見える。
web.config
<connectionStrings>
<add name="WorkContext" connectionString="Data Source=.\\SQLEXPRESS;Initial Catalog=testDb;Integrated Security=True" />
</connectionStrings>
IIS配置後
カスタムアカウントのところに、WindowsOSログイン時に使用したユーザIDとパスワードを入力
(逆にデータベースのほうにIISの資格を与えてもいいのかは、知らない。)
(推奨されなてないけどSQL認証のほうがデータベース接続っぽくてかっこいい)
まとめ
- IISに配置するならlocalDBじゃなくてSQL EXPRESSにする
- Windows認証ならIIS配置後にIDも変える
いろいろ無知なので、ご指導・ご鞭撻のほどよろしくお願いいたします。
おまけ
冒頭に書いたチュートリアル(InMemory)ではID重複をPUTするとStatus500が返ってたけど
データベースにしたらStatus409が返ってくるようになったから、フロントの方も変更しなくちゃならなかった