2009-05-06 21 views
1

Ich versuche, ziemlich einfaches Problem zu lösen. Ich möchte Verbindung zu 2 völlig verschiedenen Datenbanken herstellen (aber beide mysql). Jetzt habe ich versucht, dies zu lösen, indem ich mehrere Konfigurationsdateien erstellt habe und dann mehrere Sitzungen erstellt habe. Alles funktioniert, bis ich Beziehungen gefunden habe.NHibernate und mehrere Datenbanken

Ich habe 2 Tabellen in 2 Datenbanken:

db1 - News

db2 - News_Authors

I News zu db1 config und News_Authors zu db2 Config hinzugefügt. Wenn ich versuche, einfache Eins-zu-Eins-Beziehung Fehler zu bauen, ich erhalten:

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> 

config Ich habe dies hinzugefügt, um Zuordnungen zu ermöglichen. Wenn ich nun setzen beide in einer Config-Dateien, alles funktioniert ...

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

Wie konnte ich während der Sitzung auch die Schaffung „mitteilen“ nhibernate, dass ich mehrere Sitzungen haben? Oder sollte ich einen anderen Ansatz wählen?

+1

Ich denke, es gibt eine Nuance, die von den Antworten verpasst hat. Sagen Sie, dass sich die Tabellen in zwei verschiedenen Datenbanken befinden und Sie die Daten datenbankübergreifend verknüpfen möchten? –

+0

Ich glaube, genau das fragt der Fragesteller. Vielleicht ist das ein Job für NHibernate Shards? Ich habe es vorher noch nie benutzt und weiß nicht, ob Shards diese Art von Szenario unterstützt. –

Antwort

4

Eine andere mögliche Lösung wäre das Erstellen von Sichten in einer der SQL Server-Datenbanken, um auf die Tabellen in der anderen zu verweisen. Ansichten Karte wie Tabellen und seine leicht, einen Blick zu tun, dass so etwas zurückgibt:

select * from db2.News_Authors

in der Datenbank db1.

So benötigen Sie nur eine einzige .hbm.xml-Datei, die einer der beiden Datenbanken zugeordnet ist.

hoffe, das hilft,

-Max

0

Was Sie suchen, ist nicht mehrere Sitzungen, sondern mehrere Sitzungen Fabriken. Weitere Details finden Sie unter this.

Der Schlüssel hier ist, dass Sie Ihre Sitzungsfabrik nicht über Config-Datei initialisieren müssen - Sie können es programmatisch tun. Und es ist nur ein Schritt, zwei Session-Fabriken zu haben.

Verwandte Themen