如何使用Fluent NHibernate和多个数据库识别特定实体的会话工厂

问题接着来自Fluent NHibernate +多个数据库 (无需关注此链接,此处应该有足够的背景)。

我的问题是:

我正在使用Fluent NHibernate。 我的应用使用多个数据库。 每个数据库都有自己的实体注册(映射)它。 结果是具有多个会话工厂,每个工厂与单个DB相关,并且每个“包含”其自己的一组映射实体。

对于加载实体,我创建了一个通用的Factory类,它提供了一些可用于任何注册实体(在任何DB中)的标准加载方法。 问题是:加载方法需要为我正忙着处理的实体类使用正确的会话工厂。 我如何确定需要使用哪个会话工厂? 我手头有所有的Session Factories(并且由数据库名称索引),我只需要一种方法,只知道我即将加载的实体的类型,选择正确使用的Session Factory。

例如:

public IBaseBusinessObject CreatePopulatedInstance(Type boType, Guid instanceKey) { IBaseBusinessObject result = null; ISessionFactory sessionFactory = GetSessionFactory(boType); using (ISession session = sessionFactory.OpenSession()) { using (session.BeginTransaction()) { result = (IBaseBusinessObject)session.Get(boType, instanceKey); } } return result; } 

需要在GetSessionFactory(boType)中进行什么?

谢谢阅读!

我首先看一下ISessionFactory.GetClassMetaData方法。

 IClassMetadata metadata = sessionfactory.GetClassMetadata(boType); 

如果您可以维护ISessionFactory实例的列表,则可以枚举它们,直到找到具有类型boType的元数据的实例。

我从来没有使用它,并且没有我的引用,但是如果它不能识别类型,我希望它返回null或引发exception。 如果您获得元数据的值而没有错误,那么这就是您的会话工厂。

祝好运

尼尔。