我们开始将(Fluent)NHibernate 2.1.2插入到传统的ASP.NET应用程序中。
以前我们一直使用System.Data.OracleClient连接到Oracle 9数据库,但由于一些要求(即使用带有HBM映射的Oracle SP),似乎至少对于NH组件,我们会必须改为改编Oracle.DataAccess.dll。
在大多数情况下,我们通过以下方式成功实现了这一点:
最后一步,我们已经完成了,因为我们的ODP版本引用了它,但我们的能力有限,以确保它最终会出现在生产服务器上。
这最终导致了一个InvalidCastException:
无法投射类型的对象 'Oracle.DataAccess.Client.OracleConnection' 输入 'System.Data.Common.DbConnection'
为解决方案进行筛选,the status quo似乎是为了确保NH配置中的hbm2dll.keywords
属性设置为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
属性值绊倒回别的东西?有什么想法吗?
答案 0 :(得分:2)
ODP 9太老了,IIRC是针对.NET 1.1编译的。
您至少需要使用ODP 10.