InvalidCastException с использованием ODP 9 с Fluent NHibernate - PullRequest
0 голосов
/ 24 февраля 2011

Мы начинаем с подключения (Fluent) NHibernate 2.1.2 к устаревшему приложению ASP.NET.

Ранее мы подключались к базе данных Oracle 9 с помощью System.Data.OracleClient, но из-за некоторых требований (а именно с использованием Oracle SP с картами HBM) кажется, что по крайней мере для компонента NH мы будем вместо этого придется адаптировать Oracle.DataAccess.dll.

По большей части нам удалось заставить этот бит работать следующим образом:

  1. Добавление и ссылка на Oracle.DataAccess.dll 9.2.0.700 в слой данных.
  2. Квалификация сборки Oracle.DataAccess через web.config. [* 1 010 * * с помощью +1011 *]
  3. Добавление OraOps9.dll в приложение и установка для него Встроенный ресурс .

Последний шаг, который мы сделали, потому что наша версия ODP ссылается на него, но у нас ограничены возможности, чтобы в конечном итоге он присутствовал на рабочем сервере.

Это в конечном итоге привело к получению InvalidCastException:

Невозможно привести объект типа 'Oracle.DataAccess.Client.OracleConnection' печатать 'System.Data.Common.DbConnection'

Отыскивая решение, статус-кво , казалось, гарантировал, что свойство hbm2dll.keywords в конфигурации NH было установлено на none. Я сделал это как в динамически создаваемом конфиге, так и в беглом вызове для создания SessionFactory.

NHibernate.Cfg.Configuration cfg = 
            new NHibernate.Cfg.Configuration()
                .SetProperty("dialect", "NHibernate.Dialect.Oracle9iDialect")                    
                .SetProperty("connection.driver_class", "NHibernate.Driver.OracleDataClientDriver")
                .SetProperty("connection.connection_string",conn)
                .SetProperty("connection.provider","NHibernate.Connection.DriverConnectionProvider")                    
                .SetProperty("hbm2dll.keywords","none")
                ;            

        _sessionFactory = Fluently.Configure(cfg)                
            .Database ( OracleDataClientConfiguration.Oracle9.ConnectionString(conn) )                
            .Mappings ( x => x.FluentMappings.AddFromAssemblyOf<MyDL>() )
            .Mappings ( x => x.HbmMappings.AddFromAssemblyOf<MyEntity>() )
            .ExposeConfiguration(x => x.Properties.Add("hbm2dll.keywords", "none"))
            .BuildSessionFactory()
            ;     

Но даже в этом случае я получаю то же исключение InvalidCastException.

Есть ли что-нибудь еще, что может быть причиной этого? Является ли какой-либо из моих вызовов выше случайным отключением значения свойства hbm2dll.keywords обратно к чему-то другому? Есть идеи?

1 Ответ

2 голосов
/ 25 февраля 2011

ODP 9 устарел, и IIRC скомпилирован для .NET 1.1.

Вам необходимо использовать как минимум ODP 10.

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