Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 使用ODP 9和Fluent NHibernate进行无效的CastException_Oracle_Nhibernate_Fluent Nhibernate - Fatal编程技术网

Oracle 使用ODP 9和Fluent NHibernate进行无效的CastException

Oracle 使用ODP 9和Fluent NHibernate进行无效的CastException,oracle,nhibernate,fluent-nhibernate,Oracle,Nhibernate,Fluent Nhibernate,我们开始将(Fluent)NHibernate 2.1.2插入到传统ASP.NET应用程序中 以前,我们一直使用System.Data.OracleClient连接到Oracle 9数据库,但由于某些要求(即使用带有HBM映射的Oracle SP),似乎至少对于NH组件,我们必须改为使用Oracle.DataAccess.dll 在大多数情况下,我们通过执行以下操作实现了这一点: 在数据层中添加和引用9.2.0.700 Oracle.DataAccess.dll 通过web.config验证Or

我们开始将(Fluent)NHibernate 2.1.2插入到传统ASP.NET应用程序中

以前,我们一直使用System.Data.OracleClient连接到Oracle 9数据库,但由于某些要求(即使用带有HBM映射的Oracle SP),似乎至少对于NH组件,我们必须改为使用Oracle.DataAccess.dll

在大多数情况下,我们通过执行以下操作实现了这一点:

  • 在数据层中添加和引用9.2.0.700 Oracle.DataAccess.dll
  • 通过web.config验证Oracle.DataAccess程序集。[]
  • 将OraOps9.dll添加到应用程序中,并将其设置为Embedded Resource
  • 最后一步,我们这样做是因为我们的ODP版本引用了它,但我们的能力有限,无法确保它最终出现在生产服务器上

    这最终导致出现了一个InvalidCastException:

    无法强制转换类型为的对象 'Oracle.DataAccess.Client.OracleConnection' 打字 'System.Data.Common.DbConnection'

    筛选解决方案似乎是为了确保NH配置中的
    hbm2dll.keywords
    属性设置为
    none
    。我已经在动态创建的配置和创建SessionFactory的fluent调用中完成了这项工作

    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()
                ;     
    
    NHibernate.Cfg.Configuration Cfg=
    新的NHibernate.Cfg.Configuration()
    .SetProperty(“方言”,“NHibernate.dialogue.Oracle9iDialect”)
    .SetProperty(“connection.driver\u class”,“NHibernate.driver.OracleDataClientDriver”)
    .SetProperty(“connection.connection_string”,conn)
    .SetProperty(“connection.provider”、“NHibernate.connection.DriverConnectionProvider”)
    .SetProperty(“hbm2dll.keywords”、“无”)
    ;            
    _sessionFactory=fluntly.Configure(cfg)
    .Database(OracleDataClientConfiguration.Oracle9.ConnectionString(conn))
    .Mappings(x=>x.FluentMappings.AddFromAssemblyOf())
    .Mappings(x=>x.HbmMappings.AddFromAssemblyOf())
    .ExposeConfiguration(x=>x.Properties.Add(“hbm2dll.keywords”,“none”))
    .BuildSessionFactory()
    ;     
    
    但即使如此,我仍然得到同样的残疾例外


    还有什么其他原因可能导致这种情况吗?我上面的任何调用是否意外地将
    hbm2dll.keywords
    属性值返回到其他内容?有什么想法吗?

    ODP9太旧了,它是根据.NET1.1编译的


    您至少需要使用ODP10。

    是的,我知道,但在这种情况下,ODP9听起来是一个很难满足的要求(啊!)。我们现在正试图针对10个(甚至11个)进行编码;这更多是为了说明我们可能无法杀死ODP9请求。@RichardNeilagan:这就像对IE6有一个严格的要求一样,令人惊讶的是,我们也有这个要求。