2015-08-26 66 views
7

Mam duży projekt, który kryje kolejne 16 projektów (testy, Webs & App jak Core, Email itp:). Używam C# MVC4 do mojego głównego projektu strony internetowej. Jeśli używam non klienta zarządzanego trzeba mi zrobić folder projektu /bin nagrany biblioteka Oracle.DataAccess.dll i wszystko działa poprawnie (muszę ustawić (zmiany) w pliku web.config -> param:C# NHibernate i klient zarządzany przez Oracle

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

Połączenie DB działa poprawnie bez wyjątku ORA z wyjątkiem TNS_NAME). Muszę ustawić źródło danych na pełną ścieżkę z tnsnames.ora, gdy używam tylko aliasu takiego jak TEST, otrzymuję komunikat "Wyjątek: ORA-12154: TNS: nie można rozwiązać określonego identyfikatora połączenia", ale jeśli ustawię pełny kod tns dla aliasu -> wszystko działa świetnie.

używam hibernate.cfg.xml plik:

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

My Web.config pliku (dla klienta zarządzanego dodać oracle.manageddataaccess.client część):

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

Mam dedykowanego serwera DB & I programowania na Visual Studio 201 0 SP1 32bit (Win 7 64b). Zainstalowałem klienta Oracle 11g (wersja 32 & 64b). Plik hibernate.cfg.xml jest używany w innym 3 projekcie w pakiecie takim jak "IntegrationTest", "Core" itp:. Uruchamiam program (F5) z trybem debugowania i platformą x86.

W projekcie używam.

  • NHibernate v 3.3.1.4000
  • StructureMap v 2.6.4..
  • i inne nieistotne Pakiety

Co muszę zainstalować pakiet i jak to ustawić? I Spróbuj dodać odniesienie z Nuget

  • Dziennik Oracle ODP.NET udało Kierowca 01.12.22
  • danych Oracle Provider for .NET (ODP ... 121.1.2

Po zainstalowaniu niektóre z tych pakietów (dodaj referencje od Nuget) do mojego projektu WWW i zmienić hibernate.cfg.xml do:

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

dostałam wiadomość od VS Exception "Nie można utworzyć sterownik z NHibernate.Driver.OracleManagedDriver"


jeśli pójdę do Widok -> Server Exploler -> do Danych Cennection i ustawić Dodaj połączenie. . . (patrz link -> Łatwy dojazd do .NET Manual). Nie dostaję tylko opcji ODP.NET Managed.NET dostawca danych Ramy opcji Oracle, a przy próbie połączenia i ten komunikat „BadImageFormatException. To nastąpi podczas pracy w trybie 64-bitowym z 32-bitowych komponentów Oracle Client zainstalowany”

Moje pytanie brzmi

  1. Co mogę użyć dla odniesienia (sterownik)?
  2. Jak mogę to ustawić?

An Easy Drive to .NET Manual

Thanks a lot

+1

OracleManagedDriver został dodany w NHibernate 4.0. Brakuje go w wersji 3.4 i poprzednich. – jahav

+0

Aktualizuję do NHibernate 4.0.4., Ale nadal pojawia się komunikat "Nie można utworzyć sterownika z NHibernate.Driver.OracleManagedDriver", aw widoku -> Server Exploler -> do połączenia danych i ustawię Dodaj połączenie. . . Nie widzę opcji klienta Oracle ODP.NET, Jak znaleźć nazwę ** connection.driver_class ** z pliku nhibernate.cfg.xml, próbuję kilka zestawów takich jak NHibernateOracleExample.Driver.OracleDriver, NHibernateOracleExample lub NHibernate.Driver .OracleDataClientDriver, ale nie wiem, jaka jest właściwa nazwa dla tej wartości ustawienia –

Odpowiedz

11

Używam NHibernate 4.0.4 i mam zainstalowane "Oracle.ManagedDataAccess" pakiet Nuget (https://www.nuget.org/packages/Oracle.ManagedDataAccess/).

Aby skonfigurować NHibernate do używania sterownika zarządzanego przez Oracle, należy zmienić tylko odrobinę bity pliku hibernate.cfg.xml - i użyć NHibernate.Driver.OracleManagedDataClientDriver jako "connection.driver_class".

Dlatego mój plik konfiguracyjny xml jest jak następuje:

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

Powodzenia - Wiem, że za pomocą Oracle i ORM może być dość irytujące doświadczenie, ale taki, który jest warte wysiłku w końcu.

+0

Dzięki. Jego praca jest świetna! Mam pakiet, który sam w sobie zawiera 16 projektów (8 projektów testowych), a niektóre projekty mają starszą wersję NHibernate (3.xx) z przejściem do NHibernate (4.3). Wystarczy, aby zaktualizować, dodać funkcję mapowania do ForEach, która była w starszej wersji biblioteki NHibernate i wszystko inne działa świetnie. –

+0

Hej, czy mógłbyś rzucić okiem na moje pytanie? http://stackoverflow.com/questions/37701372/invalidcastexception-reading-number-from-oracle-using-oracle-manageddataaccess-w – Julius