首页 新闻 会员 周边

NHibernate配置使用Oracle时出错,谢谢帮看下,园豆用完了,抱歉!

0
[已解决问题] 解决于 2012-10-07 10:18

Nhibernate配置:

var cfg = new Configuration();
            cfg.SessionFactory()
                   .Proxy
                       .DisableValidation()
                       .Through<NHibernate.Bytecode.DefaultProxyFactoryFactory>()
                       .Named("Fluent.SessionFactory")
                       .GenerateStatistics()
                       .Using(EntityMode.Poco)
                       .ParsingHqlThrough<NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory>()
                   .Integrate
                       .Using<Oracle10gDialect>()
                       .AutoQuoteKeywords()
                       .LogSqlInConsole()
                       .EnableLogFormattedSql()
                   .Connected
                       .Through<DriverConnectionProvider>()
                       .By<OracleDataClientDriver>()
                       .ByAppConfing("ConnectionString")
                   .CreateCommands
                       .Preparing()
                       .WithTimeout(10)
                       .AutoCommentingSql()
                       .WithMaximumDepthOfOuterJoinFetching(11)
                       .WithHqlToSqlSubstitutions("true 1, false 0, yes 'Y', no 'N'");

            _sessionFactory = cfg.BuildSessionFactory();

调用的时候,报出错误:

 System.TypeInitializationException: “Fluent.Infrastructure.Domain.NhibernateRepository.OracleSessionFactoryHelper”的类型初始值设定项引发异常。 ---> NHibernate.HibernateException: Could not create the driver from NHibernate.Driver.OracleDataClientDriver, NHibernate, Version=3.3.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4. ---> System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.ArgumentException: 找不到请求的 .Net Framework Data Provider。可能没有安装。
    在 System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)

后台根据网上的资料。补充了app.config的配置信息:

app.config:(添加如下配置)

<DbProviderFactories>
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, oracle.dataaccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64" />
</DbProviderFactories>

 

开始报另一个错误:

:在配置了DbProviderFactories的情况下:

System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.IO.FileLoadException: 未能加载文件或程序集“oracle.dataaccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)

 

但是GAC中的程序集显示正常:

网上找了很多资料,过都没有找到可以解决的办法,还是报这个异常。

其中一些资料的地址:

http://www.xinglongjian.com/index.php/2012/06/15/oracleodpfornet/

http://www.patternwebsolutions.com/2011/07/10/connect-to-oracle-using-fluentnhibernate/

http://stackoverflow.com/questions/11728521/could-not-create-the-driver-from-nhibernate-driver-oracledataclientdriver-with

http://www.timvasil.com/blog14/post/2008/02/14/NHibernate-SpringNET-with-Oracle.aspx

麻烦使用过oracle相关的配置的兄弟姐妹帮帮忙。谢谢,比较紧急。

本机环境:

win7  64位

没有安装Oracle环境  ,GAC安装了64位相关的odp.net程序集。

测试项目执行时报上述错误。没有直接引用程序集,而是直接拷贝到bin目录下的。

注:我这个是在MSTesting项目的单元测试下执行抛出的异常。

后台我建 了个MVC项目中,一切正常,非常感谢大家的回复和启发。不过还是希望帮我看看如何能在MSTesting中正确的配置运行ODP.net

问题补充:

 不好意思。最新估mvc的web项目中没的有出现我描述错误,只有测试项目中无论怎么试都没用

chen eric的主页 chen eric | 初学一级 | 园豆:4
提问于:2012-10-02 21:42
< >
分享
最佳答案
0

要安装Oracle客户端和odp.net的,写个控制台或者直接用odp.net的自带例子连连数据库,连好了,nh连接也好了。

奖励园豆:5
李永京 | 老鸟四级 |园豆:3114 | 2012-10-03 17:01

我到时候试试看。不过用自带的连接一下,nh就好了,这个不太好理解。有空的话,永京兄给解释下,谢谢啦,嘿嘿 

chen eric | 园豆:4 (初学一级) | 2012-10-03 22:13

抱歉,我之前是因为有MSTest项目中单元测试,一直不可能。今天受永京兄弟的启发,我创建了个mvc站点去测试 了下,发现一切OK。不过MSTesting单元测试下面还是没有解决。如果大家知道 的话还是希望帮忙解决下,无限感激!

chen eric | 园豆:4 (初学一级) | 2012-10-03 23:05
其他回答(1)
0

可能是拷贝到bin目录中时有些依赖的程序集没有拷贝过来。

建议直接引用程序集,并将 Copy Local 设置为 True。

dudu | 园豆:31003 (高人七级) | 2012-10-03 08:57

后来装了客户端。通过程序集引用。还是一样的

支持(0) 反对(0) chen eric | 园豆:4 (初学一级) | 2012-10-03 22:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册