2015-08-26 13 views
7

Ho un grande progetto che nasconde un altro progetto 16 (Test, Webs & App come Core, Email ecc .:.). Io uso C# MVC4 per il mio progetto del sito web principale. Se uso un client non gestito ha bisogno di me per fare una cartella di progetto /bin registrato biblioteca Oracle.DataAccess.dll e tutto funziona bene (devo impostare (cambiamento) nel web.config -> param:C# NHibernate e 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> 

E la connessione DB funziona bene senza l'eccezione ORA TNS_NAME). Devo impostare Origine dati su percorso completo con tnsnames.ora quando uso solo alias come TEST ottengo un messaggio "Eccezione: ORA-12154: TNS: impossibile risolvere l'identificativo di connessione specificato", ma se imposto il codice tns completo per l'alias -> tutto funziona alla grande.

Io uso hibernate.cfg.xml di file:

<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> 

mio web.config file (ad client gestito aggiungere parte oracle.manageddataaccess.client):

<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> 

Ho dedicato il server DB & I programmazione su Visual Studio 201 0 SP1 32bit (Win 7 64b). Ho installato il client Oracle 11g (versione 32 & 64b). Il file hibernate.cfg.xml è utilizzato in altri 3 progetti in pacchetti come "IntegrationTest", "Core" ecc :. Eseguo il programma (F5) con la modalità Debug e la piattaforma x86.

Nel progetto che uso:.

  • NHibernate v 3.3.1.4000
  • StructureMap v 2.6.4..
  • e altri pacchetti non importanti

Cosa devo installare il pacchetto e come impostare il tutto? provo aggiungere di riferimento con Nuget

  • ufficiale Oracle ODP.NET, driver Managed 12.1.22
  • Oracle Data Provider for .NET (ODP ... 121.1.2

Quando installo alcuni di questi pacchetti (aggiungere riferimenti da Nuget) al mio progetto Sito web e modifico hibernate.cfg.xml a:

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

ho ricevuto da VS Exception "Impossibile creare il driver dal NHibernate.Driver.OracleManagedDriver"


Se vado al Visualizza -> Server Exploler -> al dati Cennection e ho fissato un Aggiungi connessione. . . (vedi link -> Un semplice disco per il manuale .NET). Non ottengo un'opzione gestita ODP.NET, solo.NET provider di dati Framework opzione Oracle per, e quando provo connessione ottengo questo messaggio "BadImageFormatException. Ciò si verifica durante l'esecuzione in modalità a 64 bit con i componenti client Oracle a 32 bit installati"

La mia domanda è

  1. Cosa posso usare come riferimento (driver)?
  2. Come faccio a impostarlo?

An Easy Drive to .NET Manual

Grazie mille

+1

OracleManagedDriver è stata aggiunta in NHibernate 4.0. Manca da 3.4 e precedenti. – jahav

+0

aggiorno a NHibernate 4.0.4, ma ho ancora ricevuto il messaggio "Impossibile creare il driver dal NHibernate.Driver.OracleManagedDriver" e in vista -.> Exploler Server -> per la connessione dati e ho impostato un Aggiungi connessione. . . Non vedo Opzione ODP.NET Managed Oracle Client, come posso trovare nome ** ** connection.driver_class da file nhibernate.cfg.xml, provo qualche diverse serie come NHibernateOracleExample.Driver.OracleDriver, NHibernateOracleExample o NHibernate.Driver .OracleDataClientDriver ma non so che cosa è un nome giusto per questo valore di impostazione –

risposta

11

Sto usando NHibernate 4.0.4 ed ho installato il pacchetto NuGet "Oracle.ManagedDataAccess" (https://www.nuget.org/packages/Oracle.ManagedDataAccess/).

Per configurare NHibernate per utilizzare Oracle Managed driver è necessario cambiare appena un po 'il file hibernate.cfg.xml - e utilizzare il NHibernate.Driver.OracleManagedDataClientDriver come "connection.driver_class".

Pertanto, il mio file di configurazione XML è come segue:

<?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> 

Buona fortuna - io so che l'utilizzo di Oracle e ORM può essere un'esperienza fastidiosa abbastanza, ma che vale la pena alla fine.

+0

Grazie. Funziona alla grande! Ho un pacchetto che di per sé includuje 16 progetti (progetto 8 prove), e alcuni progetti hanno una versione di NHibernate (3.xx) con il passaggio alla NHibernate (4.3). Basta aggiornare, aggiungere funzionalità di mappatura a ForEach, che era nella versione precedente della libreria NHibernate e tutto il resto funziona alla grande. –

+0

Ehi, potresti dare un'occhiata alla mia domanda? http://stackoverflow.com/questions/37701372/invalidcastexception-reading-number-from-oracle-using-oracle-manageddataaccess-w – Julius

Problemi correlati