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://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项目中没的有出现我描述错误,只有测试项目中无论怎么试都没用
要安装Oracle客户端和odp.net的,写个控制台或者直接用odp.net的自带例子连连数据库,连好了,nh连接也好了。
我到时候试试看。不过用自带的连接一下,nh就好了,这个不太好理解。有空的话,永京兄给解释下,谢谢啦,嘿嘿
抱歉,我之前是因为有MSTest项目中单元测试,一直不可能。今天受永京兄弟的启发,我创建了个mvc站点去测试 了下,发现一切OK。不过MSTesting单元测试下面还是没有解决。如果大家知道 的话还是希望帮忙解决下,无限感激!
可能是拷贝到bin目录中时有些依赖的程序集没有拷贝过来。
建议直接引用程序集,并将 Copy Local 设置为 True。
后来装了客户端。通过程序集引用。还是一样的