ASP.NET預設的InProc模式的Session既浪費記憶體又在網站重啟時存在資料丟失問題,SQLServer模式的Session只支援SQL Server又需要命令列配置。使用EntityFramwork實現Custom既可以利用EntityFramework實現自定義的SessionProvider既可以避免資料丟失又不用捆綁到Sql Server上,還可以採用CodeFirst的自動生成資料庫的方式,讓我們不再需要命令列配置。
我們可以按照實際情況,對低配置單個網站採用嵌入式資料庫,對負載均衡的Session統一使用分散式的Session伺服器避免狀態丟失,更可以在後期不用修改原有程式碼,只通過修改web.config方便的新增和切換其他提供了EntityFramework的資料庫。
1.定義實體:
實體的程式碼我通過EntityFramework的外掛從資料庫反向生成了ASP.NET Session的實體程式碼,參考github上其他的Session提供程式進行了修改,將2個表合併,依然支援不同Application級別的Session存取。
2.自定義提供程式:
主要的參考三個來源:
(1)MongoDB-ASP.NET-Session-State-Store(https://github.com/AdaTheDev/MongoDB-ASP.NET-Session-State-Store)
(2)SQLiteSessionStateStore(https://github.com/micahlmartin/SQLiteSessionStateStore)
(3)System.Web.SessionState.SqlSessionStateStore(ILSpy)
3.配置web.config
通過切換Provider的connectionStringName屬性可以切換不同的資料連線。
4.測試功能:
只是簡單的測試了讀寫。
5.檢視結果:
程式碼已經上傳到gitosc:http://git.oschina.net/myshare/EntityFramework.SessionStateStoreProvider
元件已經上傳到nuget:https://www.nuget.org/packages/EfSessionStateProvider/