2015-08-26 2 views
7

У меня есть большой проект, который скрывает еще один проект 16 (тесты, веб-приложения & Приложения, такие как ядро, электронная почта и т. Д.). Я использую C# MVC4 для моего основного проекта веб-сайта. Если я использовать не Managed Client нужно мне сделать папку проекта /бен записана библиотекой Oracle.DataAccess.dll и все работает отлично (я должен установить (изменить) в Web.config -> пары: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> 

И соединение DB работает нормально без исключения ORA TNS_NAME). Я должен установить источник данных в полный путь с помощью tnsnames.ora, когда я использую только псевдоним типа TEST, я получаю сообщение «Исключение: ORA-12154: TNS: не удалось разрешить указанный идентификатор подключения», но если я задаю полный код tns для псевдонима -> все отлично работает.

Я использую hibernate.cfg.xml файл:

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

Мои Web.config файл (для управляемого клиента добавить 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> 

У меня выделенный сервер БД & I программирование на Visual Studio 201 0 SP1 32bit (Win 7 64b). Я установил клиент Oracle 11g (32 & 64b). Файл hibernate.cfg.xml используется в другом 3-х проектах в пакете типа «IntegrationTest», «Core» и т. Д .:. Я запускаю программу (F5) с режимом Debug и платформой x86.

В проекте я использую:.

  • NHibernate v 3.3.1.4000
  • StructureMap V 2.6.4..
  • и другие незначительные пакеты

Что я должен установить пакет и как его настроить? Пытаюсь добавить ссылку с NuGet

  • Официальный Oracle ODP.NET, управляемый Driver 12.1.22
  • Поставщик данных Oracle для .NET (ODP ... 121.1.2

Когда я устанавливаю некоторые из этих пакетов (добавить ссылки из NuGet) в мой проект веб-сайта и я изменить hibernate.cfg.xml на:

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

Я получил сообщение от VS Exception "Не удалось создать драйвер с NHibernate.Driver.OracleManagedDriver"


Если я иду к View -> Сервер Exploler -> к данных Cennection и я поставил Add Connection. , , (см. Ссылку -> Руководство Easy Drive to .NET). Я не получаю только управляемый параметр ODP.NET.NET Framework Поставщик данных для опции Oracle, и когда я пытаюсь соединение я получаю сообщение «BadImageFormatException. Это будет происходить при работе в 64-битном режиме с 32 битными клиента Oracle установленных компонентов»

Мой вопрос является

  1. Что я могу использовать для справки (драйвера)?
  2. Как его установить?

An Easy Drive to .NET Manual

Большое спасибо

+1

OracleManagedDriver был добавлен в NHibernate 4.0. Его нет в 3,4 и предыдущих. – jahav

+0

Я обновляюсь до NHibernate 4.0.4., Но у меня все еще появилось сообщение «Не удалось создать драйвер из NHibernate.Driver.OracleManagedDriver» и в View -> Server Exploler -> для подключения к данным и установить «Добавить соединение». , , Я не вижу ODP.NET управляемого Oracle Client Option, как я могу найти имя ** connection.driver_class ** из файла nhibernate.cfg.xml, я попробую несколько нескольких наборов, таких как NHibernateOracleExample.Driver.OracleDriver, NHibernateOracleExample или NHibernate.Driver .OracleDataClientDriver, но я не знаю, что является правильным именем для этого значения настройки –

ответ

11

Я использую NHibernate 4.0.4 и я установил "Oracle.ManagedDataAccess" NuGet пакет (https://www.nuget.org/packages/Oracle.ManagedDataAccess/).

Чтобы настроить NHibernate на использование управляемого драйвера Oracle, необходимо просто изменить бит hibernate.cfg.xml и использовать NHibernate.Driver.OracleManagedDataClientDriver в качестве «connection.driver_class».

Поэтому мой конфигурационный файл XML как это следующим образом:

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

Успехов - Я знаю, что с помощью Oracle и ОРМ может быть весьма раздражает опыт, но один, что стоит усилий, в конце концов.

+0

Спасибо. Его работа великолепна! У меня есть пакет, который сам по себе включает 16 проектов (8 тестовых проектов), а некоторые проекты имеют старую версию NHibernate (3.xx) с переходом на NHibernate (4.3). Достаточно обновить, добавить функциональность отображения в ForEach, которая была в старой версии библиотеки NHibernate, и все остальное отлично работает. –

+0

Эй, не могли бы вы взглянуть на мой вопрос? http://stackoverflow.com/questions/37701372/invalidcastexception-reading-number-from-oracle-using-oracle-manageddataaccess-w – Julius