我有一個Web應用程序連接到多個數據庫的實例。基於域名(例如www.shop1.com,www.shop2.com,..),我在實體框架中切換連接字符串。切換Sql會話狀態數據庫
shop1.com -> Database1
shop2.com -> Database2
shop3.com -> Database3
到目前爲止好。
我也使用Sql Server會話狀態,我想切換會話狀態數據庫,就像我爲我的數據切換數據庫。
shop1.com -> SessionStateDatabase1
shop2.com -> SessionStateDatabase2
shop3.com -> SessionStateDatabase3
在此先感謝您的幫助。如果你想知道爲什麼我這樣做
的更多信息:
其實我實現多租戶。上面的描述顯示了三個站點。事實上,我擁有50多個網站。未來幾個月網站的數量將會增長。目前,所有站點都單獨部署,這意味着無論何時必須推出補丁或更新,我都部署全部50個站點。以這種方式維護網站正成爲一場噩夢。所以我在考慮在一個實例上放置5到10個站點,具體取決於它們的用途,這樣我就可以維護更少的實例。
謝謝@fejesjoco。我肯定會在下週看到它,因爲它看起來很有前途。 – Oxon
我懷疑還有其他好的方法可以做到這一點,而且這是一個支持和不錯的方式。實施IPartitionResolver不是最簡單的任務,因爲您需要將會話ID映射到連接字符串。所以如果你想根據域名來決定,那麼你需要以某種方式將域名映射到會話ID。您可以將該映射存儲在某處(在Global Session_Start事件中),或者...我能想到的最簡單的技巧是使用自定義ISessionIDManager並將數據庫標識符直接放入會話ID中。所以當你看到會話ID時,你知道它在哪個數據庫中。 – fejesjoco