流畅的NHibernate - 配置Oracle数据提供程序ODP

时间:2010-07-16 16:04:28

标签: oracle configuration fluent-nhibernate odp.net

我是NHibernate和Fluent NHibernate的新手,我正在尝试让以下配置工作。

private static ISessionFactory CreateSessionFactory()
{
     return Fluently.Configure() 
       .Database(
       OracleDataClientConfiguration.Oracle10.ConnectionString("Data Source=mysource;User ID=myid;Password=mypwd;")                  
          )
         .Mappings(m =>
            m.FluentMappings.AddFromAssemblyOf<Program>())
         .BuildSessionFactory();

    }

我引用了Oracle.DataAccess程序集。我正在使用VS 2010和.Net 4

我得到以下异常:

FluentNHibernate.Cfg.FluentConfigurationException未处理   Message =创建SessionFactory时使用了无效或不完整的配置。检查PotentialReasons集合,以及InnerException以获取更多详细信息。

源= FluentNHibernate   堆栈跟踪:        在D:\ Builds \ FluentNH \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs中的FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()中:第98行        在C:\ Projects \ CPS测试概念\ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs中的HibernateLearning.Program.CreateSessionFactory():第48行        在C:\ Projects \ CPS测试概念\ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs中的HibernateLearning.Program.Main(String [] args):第21行        在System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,String [] args)        在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args)        在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()        在System.Threading.ThreadHelper.ThreadStart_Context(对象状态)        at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean ignoreSyncCtx)        在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)        在System.Threading.ThreadHelper.ThreadStart()   InnerException:NHibernate.HibernateException        Message =无法从NHibernate.Driver.OracleDataClientDriver,NHibernate,Version = 2.1.2.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4创建驱动程序。        来源= NHibernate的        堆栈跟踪:             在NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary 2 settings) at NHibernate.Connection.ConnectionProvider.Configure(IDictionary 2设置)             在NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary 2 settings) at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary 2个属性)             在NHibernate.Cfg.Configuration.BuildSettings()             在NHibernate.Cfg.Configuration.BuildSessionFactory()             在FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()中的d:\ Builds \ FluentNH \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs:第93行        InnerException:System.Reflection.TargetInvocationException             Message =调用目标抛出了异常。             来源= mscorlib程序             堆栈跟踪:                  在System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,Boolean publicOnly,Boolean noCheck,Boolean&amp; canBeCached,RuntimeMethodHandleInternal&amp; ctor,Boolean&amp; bNeedSecurityCheck)                  在System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache)                  at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean skipCheckThis,Boolean fillCache)                  在System.Activator.CreateInstance(Type type,Boolean nonPublic)                  在System.Activator.CreateInstance(类型类型)                  at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type)                  在NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2设置)             InnerException:NHibernate.HibernateException                  Message =无法找到程序集Oracle.DataAccess中的IDbCommand和IDbConnection实现。确保程序集Oracle.DataAccess位于应用程序目录或全局程序集缓存中。如果程序集位于GAC中,请使用应用程序配置文件中的元素指定程序集的全名。                  来源= NHibernate的                  堆栈跟踪:                       at NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName,String connectionTypeName,String commandTypeName)                       在NHibernate.Driver.OracleDataClientDriver..ctor()                  InnerException:

2 个答案:

答案 0 :(得分:7)

我明白了。当您引用ODP时,您必须将引用的copy local属性设置为true,否则它将找不到它要查找的对象。

一个障碍,我相信会有更多,但我喜欢这些工具!

答案 1 :(得分:0)

如果ODP dll的平台与应用程序平台(x86 vs x64)不匹配,也可能会出现此问题。更改项目以针对正确的平台进行编译。