NHibernate和多个数据库

时间:2009-05-06 19:59:51

标签: c# nhibernate

我正在努力解决相当容易的问题。我想建立与2个完全不同的数据库(但两个mysql)的连接。现在我尝试通过创建多个配置文件然后创建多个会话来解决这个问题。一切顺利,直到我达成关系。

我在2个数据库中有2个表:

db1的   - 新闻

DB2   - News_Authors

我将db1 config和News_Authors添加到db2 config。当我尝试构建简单的一对一关系错误时,我收到:

An association from the table songs refers to an unmapped class: db1.News_Authors

News.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="project.News, project" table="news" lazy="false">
    <id name="id" column="id" type="integer" length="11">
      <generator class="native" />
    </id>
    <property name="title" type="String" length="255" />
    <property name="authorid" type="integer" length="5" />

    <one-to-one name="NewsAuthor" cascade="all-delete-orphan" lazy="proxy" column="authorid" unique="true" />
  </class>     
</hibernate-mapping>

News_Authors.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="project.News_Authors, project" table="news_authors" lazy="false">
    <id name="id" column="id" type="integer" length="11">
      <generator class="native" />
    </id>
    <property name="name" type="String" length="255" />
  </class>     
</hibernate-mapping>

配置 我添加了这个来启用映射。现在如果我在一个配置文件中设置两者,一切正常......

<mapping resource="project.News.hbm.xml" assembly="project" />

那么我怎么能在创建会话期间“通知”nhibernate我有多个会话?或者我应该选择另一种方法吗?

2 个答案:

答案 0 :(得分:4)

另一种可能的解决方案是在其中一个sql server数据库中创建视图以引用另一个中的表。视图映射就像表一样,它很容易做一个返回类似于:

的视图

从db2.News_Authors

中选择*

在db1数据库中。

这样你只需要一个映射到两个数据库之一的.hbm.xml文件。

希望这有帮助,

-Max

答案 1 :(得分:0)

您所追求的不是多个会话而是多个会话工厂。有关详细信息,请参阅this

这里的关键是您不必通过配置文件初始化会话工厂 - 您可以以编程方式执行此操作。而这只是两个会议工厂的一步。