我是 Castle Windsor 和Fluent NHibernate(AutoMapping)的新手。
我目前正致力于多租户申请,并有以下要求。
我使用Castle Windsor集成了持久性工具,我可以访问主数据库。我陷入困境,我想从主Db获取租户的连接信息,再次将此信息传递给持久性工具以构建新会话。因此,最终可以访问主数据库和租户特定的Db。
任何人都可以指导我如何继续这样做。
简而言之:
在用户登录时,我想验证用户并从主数据库中识别其租户数据库连接字符串,并使用此信息为特定于租户的数据库操作构建新会话。
答案 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。