2015-08-26 19 views
7

Ich habe ein großes Projekt, das ein anderes 16 Projekt verbirgt (Tests, Webs & App wie Core, E-Mail etc .:.). Ich verwende C# MVC4 für mein Hauptweb site Projekt. Wenn ich einen nicht Managed Client brauchen mich verwenden, um einen Projektordner /bin aufgezeichnet Bibliothek Oracle.DataAccess.dll und alles funktioniert gut zu tun (ich muss (ändern) in Web.config gesetzt -> param:C# NHibernate & Oracle Managed Client

<connectionStrings> 
    <add name="PC13" connectionString="User Id=TEST; Password=TEST; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DBTEST)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = DBTEST)));" /> 
</connectionStrings> 

Und DB Verbindung funktioniert gut ohne ORA Ausnahme TNS_NAME). Ich muss Datenquelle auf vollständigen Pfad mit tnsnames.ora setzen, wenn ich nur Alias ​​wie TEST verwende, erhalte ich eine Nachricht "Ausnahme: ORA-12154: TNS: Konnte die angegebene Verbindungskennung nicht auflösen", aber wenn ich vollständigen tns-Code für Alias ​​einstelle -> Alles funktioniert super.

Ich benutze hibernate.cfg.xml Datei:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property> 
     <property name="show_sql">true</property> 
     <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property> 
     <property name="command_timeout">60</property> 
     <property name="cache.provider_class">NHibernate.Caches.SysCache2.SysCacheProvider, NHibernate.Caches.SysCache2</property> 
     <property name="cache.use_second_level_cache">true</property> 
     <property name="cache.use_query_cache">true</property> 
     <property name="cache.default_expiration">120</property> 
    </session-factory> 

Meine Web.config-Datei (für verwaltete Client oracle.manageddataaccess.client Teil hinzugefügt werden):

<connectionStrings> 
    <add name="PC13" connectionString="User Id=TEST; Password=TEST; Data Source=DBTEST;" /> 
</connectionStrings> 

<oracle.manageddataaccess.client> 
    <version number="*"> 
     <dataSources> 
     <dataSource alias="DBTEST" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DBTEST)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = DBTEST)))"/> 
     </dataSources> 
    </version> 
</oracle.manageddataaccess.client> 

Ich habe dedizierten DB-Server & ich auf Visual Studio 201 programmieren 0 SP1 32 Bit (Win 7 64b). Ich habe Oracle Client 11g (32 & 64b Version) installiert. Die Datei hibernate.cfg.xml wird in einem anderen 3-Projekt im Paket wie "IntegrationTest", "Core" etc: verwendet. Ich starte Programm (F5) mit Debug-Modus und x86-Plattform.

Im Projekt, das ich benutzen.

  • NHibernate v 3.3.1.4000
  • StructureMap v 2.6.4..
  • und andere unwichtige Pakete

Was muss ich das Paket installieren und wie man es einrichten? I Try Referenz hinzufügen mit Nuget

  • Offizielle Oracle ODP.NET, Managed-Treiber 12.1.22
  • Oracle Data Provider for .NET (ODP ... 121.1.2

Wenn ich installieren einige dieser Pakete auf meiner Website-Projekt (Referenzen aus Nuget hinzufügen) und i ändern hibernate.cfg.xml zu:

<property name="connection.driver_class">NHibernate.Driver.OracleManagedDriver</property> 

ich habe Nachricht von VS Ausnahme


"Könnten Sie den Treiber von NHibernate.Driver.OracleManagedDriver nicht erstellen" Wenn ich auf die Ansicht gehen -> Server Exploler -> zur Daten Cennection und ich eine Verbindung hinzufügen. . . (siehe Link -> Eine einfache Anleitung zum .NET-Handbuch). Ich bekomme nur keine ODP.NET Managed Option.NET Framework-Datenprovider für Oracle-Option, und wenn ich Verbindung versuchen, erhalte ich diese Meldung „BadImageFormatException. Dies tritt auf, wenn in 64-Bit-Modus mit den 32-Bit-Oracle-Client-Komponenten ausgeführt wird installiert“

Meine Frage ist

  1. Was kann ich als Referenz (Treiber) verwenden?
  2. Wie kann ich es einstellen?

An Easy Drive to .NET Manual

Vielen Dank

+1

OracleManagedDriver wurde in NHibernate 4.0 hinzugefügt. Es fehlt von 3.4 und vorherigen. – jahav

+0

Ich Update auf NHibernate 4.0.4., Aber ich habe immer noch eine Nachricht "Konnte nicht den Treiber von NHibernate.Driver.OracleManagedDriver" und in Ansicht -> Server Exploler -> auf die Datenverbindung und ich eine Verbindung hinzufügen. . . Ich kann ODP.NET Managed Oracle Client Option nicht sehen, Wie kann ich den Namen ** connection.driver_class ** aus der Datei nhibernate.cfg.xml finden, probiere ich einige wenige Sätze wie NHibernateOracleExample.Driver.OracleDriver, NHibernateOracleExample oder NHibernate.Driver .OracleDataClientDriver, aber ich weiß nicht, was ist ein richtiger Name für diesen Einstellungswert –

Antwort

11

Ich verwende NHibernate 4.0.4 und ich habe die "Oracle.ManagedDataAccess" nuget Paket (https://www.nuget.org/packages/Oracle.ManagedDataAccess/) installiert.

Um NHibernate für die Verwendung des Oracle Managed Driver zu konfigurieren, ist es notwendig, nur ein bisschen die Datei hibernate.cfg.xml zu ändern - und NHibernate.Driver.OracleManagedDataClientDriver als "connection.driver_class" zu verwenden.

Daher meine XML-Konfigurationsdatei ist wie folgt:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="connection.driver_class">NHibernate.Driver.OracleManagedDataClientDriver</property> 
    <property name="connection.connection_string">User Id=user;Password=pws;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.18)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SRV)))</property> 
    <property name="show_sql">true</property> 
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property> 
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property> 
    </session-factory> 
</hibernate-configuration> 

Viel Glück - ich weiß, dass Oracle und ORM kann durchaus eine ärgerliche Erfahrung sein, aber einer, der Aufwand am Ende wert ist.

+0

Danke. Seine Arbeit großartig! Ich habe ein Paket, das selbst 16 Projekte enthält (8 Testprojekt), und einige Projekte haben eine alte Version von NHibernate (3.xx) mit dem Übergang zu NHibernate (4.3). Genug zu aktualisieren, fügen Sie Mapping-Funktionalität zu ForEach, die in der älteren Version der Bibliothek NHibernate war und alles andere funktioniert gut. –

+0

Hey, kannst du dir meine Frage ansehen? http://stackoverflow.com/questions/37701372/invalidcastexception-reading-number-from-oracle-using-oracle-manageddataaccess-w – Julius