ASP.NET MVC5でSessionStateをSqlServerにしてみる

「ASP.NET MVC5 実践プログラミング」ではRedisを使う紹介があったのですが、SQLServerでもできるようなので調べてみたらめんどうだったのでメモ。

まず、sessionStateの設定。

[code lang=text]


[/code]

このまま実行したら勝手に良きに計らってくれるのだろう。

と思ったらエラー。

ASP.NET Version 2.0 Session State が SQL Server 上にインストールされていないか、dbo.TempGetVersion ストアド プロシージャを実行するためのアクセス許可が ASP.NET にないため、SQL Server を使用できません。ASP.NET Session State スキーマがインストールされていない場合は、ASP.NET Session State SQL Server Version 2.0 以降をインストールしてください。スキーマがインストールされている場合は、dbo.TempGetVersion ストアド プロシージャを実行するためのアクセス許可を、アプリケーション プール ID、または sqlConnectionString 属性で指定されている SQL Server ユーザーに付与してください。 

「ASP.NET Version 2.0 Session State が SQL Server 上にインストールされていない」らしい。なにそれ。
探してみると aspnet_regsql.exeを使ってセッションを管理する色々を追加すると良いらしい。

普通のSQLサーバーの場合(試してない)

[code lang=text]
> C:WindowsMicrosoft.NETFrameworkv4.0.30319aspnet_regsql.exe -S server -E -ssadd -sstype p
[/code]

ASP.NET開発で使うローカルDBの場合

[code lang=text]
> C:WindowsMicrosoft.NETFrameworkv4.0.30319aspnet_regsql.exe -S “(localdb)v11.0” -E -ssadd -sstype c -d DatabaseName
[/code]

コレを実行するとデータベース内に必要なテーブルとストアドが登録されて、晴れてセッションをSqlServerで管理できるようになりました。

migrationさせるにはどうしたらいいのかなぁ。ちまちま定義を作るしかないのかな。ストアドって作れたっけ。SQL流せばいいのかな。

(AzureではRedisを使おうと思っているので一生調べない気もする。)