2013-01-02 16 views
1

我是城堡溫莎和流利NHibernate(自動搜索)新。
我目前正在處理多租戶應用程序,並且有以下要求。如何開發使用城堡windsor流利nhibernate和MVC4多租戶應用程序

  1. 主數據庫來存儲租戶信息每個租戶

我一直在使用溫莎城堡集成持久性設施,我能夠訪問主數據庫

  • 數據庫。我遇到困難,我想從主Db獲取租戶的連接信息,再次將此信息傳遞給持久性設施以構建新會話。因此,最終可以訪問主數據庫和租戶特定的Db。

    任何人都可以指導我如何繼續這一點。

    簡而言之:
    在用戶登錄時,我想驗證用戶並從主數據庫中標識租戶數據庫連接字符串,並使用此信息爲租戶特定數據庫操作構建新會話。

  • 回答

    0

    我會從ISession創建2個派生類:IMasterSession和ITenantSession。 這使您可以輕鬆地從控制器或查看模型中引用任一數據庫。

    您需要爲您的master數據庫進行兩次ISessionFactory註冊,爲您的租戶數據庫進行一次註冊。命名這些以便您可以參考這些。

    現在註冊IMasterSession如下:

    Component.For<ISession>().PerWebRequest().Named("masterSession").UsingFactoryMethod((k, m) => 
        { 
         var masterFactory = k.Resolve<ISessionFactory>("masterSessionFactory"); 
         return masterFactory.OpenSession(); 
        }), 
    Component.For<object>().Forward<IMasterSession>().Proxy.MixIns(registration => 
        registration.Component("masterSession")) 
    

    會話工廠必須與生活方式單登記,因爲你只需要一個在你的應用程序。會話的生命週期將取決於您正在製作的應用程序的類型,可能是PerWebRequest。

    可能有更好的方法來做到這一點,我很樂意聽到這個。

    租戶數據庫的方法應該類似。但是,您可能需要使用帶有IDBConnection的OpenSession的重載或實現自定義連接提供程序。你可以找到更多關於該here

    我希望這可以幫助。

    親切的問候,

    Marwijn。

    相關問題