加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用Fluent NHibernate和多个数据库识别特定实体的会

发布时间:2020-12-15 07:59:18 所属栏目:百科 来源:网络整理
导读:问题从 Fluent NHibernate + multiple databases开始(不需要关注此链接,这里应该有足够的背景). 我的问题是: 我正在使用Fluent NHibernate.我的应用使用多个数据库.每个数据库都有自己的实体注册(映射)它.结果是具有多个会话工厂,每个工厂与单个DB相关,并且
问题从 Fluent NHibernate + multiple databases开始(不需要关注此链接,这里应该有足够的背景).

我的问题是:

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

对于加载实体,我创建了一个通用的Factory类,它提供了一些可用于任何注册实体(在任何数据库中)的标准加载方法.问题是:加载方法需要为我正忙着处理的实体类使用正确的会话工厂.我如何确定需要使用哪个会话工厂?我手头有所有的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或引发异常.如果您获得元数据的值而没有错误,那么这就是您的会话工厂.

祝好运

尼尔.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读