如何使用Castle windsor流利的nhibernate和MVC4开发多租户应用程序

时间:2013-01-02 07:16:32

标签: nhibernate castle-windsor multi-tenant fluent castle

我是 Castle Windsor 和Fluent NHibernate(AutoMapping)的新手。
我目前正致力于多租户申请,并有以下要求。

  1. 主数据库存储租户信息
  2. 每个租户的数据库
  3. 我使用Castle Windsor集成了持久性工具,我可以访问主数据库。我陷入困境,我想从主Db获取租户的连接信息,再次将此信息传递给持久性工具以构建新会话。因此,最终可以访问主数据库和租户特定的Db。

    任何人都可以指导我如何继续这样做。

    简而言之:
    在用户登录时,我想验证用户并从主数据库中识别其租户数据库连接字符串,并使用此信息为特定于租户的数据库操作构建新会话。

1 个答案:

答案 0 :(得分:0)

我将从ISession创建2个派生类:IMasterSession和ITenantSession。 这使您可以轻松地从控制器或视图模型中引用任一数据库。

您需要为主数据库进行两次ISessionFactory 1注册,为租户数据库注册一次。为这些命名,以便您可以参考这些。

现在注册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。