Tre*_*vor 7 c# fluent-nhibernate multiple-databases
问题接着来自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;
}
Run Code Online (Sandbox Code Playgroud)
需要在GetSessionFactory(boType)中进行什么?
谢谢阅读!
我首先查看 ISessionFactory.GetClassMetaData 方法。
IClassMetadata metadata = sessionfactory.GetClassMetadata(boType);
Run Code Online (Sandbox Code Playgroud)
如果您可以维护 ISessionFactory 实例的列表,则可以枚举它们,直到找到包含您的类型 boType 的元数据的实例。
我从未使用过它,也没有手头的引用,但我希望它返回 null 或在它无法识别该类型时引发异常。如果您获得元数据的值且没有错误,那么这就是您的会话工厂。
祝你好运
尼尔.
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |