ASP.NET:EntityFramework實現Session

剛哥521發表於2015-04-29

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/

 

相關文章