Проблема с использованием ODP с NHibernate - PullRequest
0 голосов
/ 21 июня 2010

У меня есть приложение .NET 3.5, написанное на C # с использованием NHibernate.
Прежде чем у меня был OracleClientDriver в свойстве connection.driver_class, это говорит о том, что я использую System.Data.Oracle, и все работает нормально, но по некоторым причинам теперь мне нужно использовать ODP, поэтому я изменил это свойство на: NHibernate.Driver.OracleDataClientDriver.
Когда я запускаю свой код, я получаю следующую ошибку при создании Session Factory:

Unable to cast object of type 'Oracle.DataAccess.Client.OracleConnection' to type 'System.Data.Common.DbConnection'

После недолгого поиска в Inernet я нашел решение: добавить:

<property name="hbm2ddl.keywords">none</property>

Так что теперь NHibernate успешно создает Session Factory, но падает в session.Flush () со следующей ошибкой:

System.ArgumentException: Value does not fall within the expected range
at Oracle.DataAccess.Client.OracleParameter.set_DbType(DbType value)
at NHibernate.Driver.DriverBase.InitializeParameter(IDbDataParameter dbParam, String name, SqlTypes sqlType)

Есть идеи?
Спасибо, что впереди. Но это дает мне следующее

1 Ответ

1 голос
/ 24 июня 2010

Я получаю это работает !!!

Я выиграл! Итак, что я делал раньше: Я получаю Oracle.DataAccess.dll из каталога bin клиента Oracle и ссылаюсь на него из сборки моего проекта. Когда я запускаю функцию NHibernate Configure (), я получаю первую ошибку. Когда я удаляю ссылку, я получаю сообщение об ошибке, в котором говорится, что мне нужно использовать элемент qalifyAssembly в app.config для ссылки GAC Oracle.DataAccess.dll.

Итак, что я сделал, чтобы решить эту проблему: Я пошел в GAC и сравнил версии dll Oracle.DataAccess с той, на которую я ссылался ранее. Это была: версия, на которую я недавно ссылался, была: 10.x.x.x, а версия dll в GAC (на самом деле было количество dll DataAccess) была 2.x.x.x. Вот: http://tiredblogger.wordpress.com/2008/ ... s-library / Я обнаружил ошибку, похожую на мою, и добавил этот код

<runtime>
       <assemblyBinding xmlns=“urn:schemas-microsoft-com:asm.v1“>
              <qualifyAssembly partialName=“Oracle.DataAccess“
                     fullName=“Oracle.DataAccess,
                            Version=2.111.6.20,
                            Culture=neutral,
                            PublicKeyToken=89b483f429c47342“ />
       </assemblyBinding>
</runtime>

в app.config, как описано выше и ссылается на эту dll. Я не знаю, почему мне нужно делать и то и другое, но только так оно и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...