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/