2010-07-16 30 views
5

我是NHibernate和Fluent NHibernate的新品牌,我正試圖獲得以下配置工作。流利的NHibernate - 配置Oracle數據提供程序ODP

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了未處理 消息=在創建一個會話使用了無效的或不完整的配置。請參閱PotentialReasons集合和InnerException以獲取更多詳細信息。

源= FluentNHibernate 堆棧跟蹤: 在FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()在d:\構建\ FluentNH \ SRC \ FluentNHibernate \ CFG \ FluentConfiguration.cs:線98 在HibernateLearning.Program.CreateSessionFactory()在C:\ Projects \ CPS Test Concepts \ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs中:第48行 位於C:\ Projects \ CPS Test Concepts \ Main中的HibernateLearning.Program.Main(String [] args) \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs:line 21 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args) at System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ThreadHelper.ThreadStart_Context(對象狀態) 在System.Threading.ExecutionContext.Run(的ExecutionContext的ExecutionContext,ContextCallback回調,對象的狀態,布爾ignoreSyncCtx) 在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:\構建\ FluentNH \ SRC \ FluentNHibernate \ CFG \ FluentConfiguration.cs:線93 的InnerException:System.Reflection.TargetInvocationException 消息=調用的目標引發了異常。 源= mscorlib程序 堆棧跟蹤: 在System.RuntimeTypeHandle.CreateInstance(RuntimeType類型,布爾publicOnly,布爾NOCHECK,布爾& canBeCached,RuntimeMethodHandleInternal &構造函數,布爾& bNeedSecurityCheck) 在System.RuntimeType.CreateInstanceSlow(布爾publicOnly,布爾skipCheckThis,布爾fillCache) 在System.RuntimeType.CreateInstanceDefaultCtor(布爾publicOnly,布爾skipVisibilityChecks,布爾skipCheckThis,布爾fillCache) 在System.Activator.CreateInstance(類型類型,布爾非公開) 在System.Activator.CreateInstance(類型類型) 在NHibernate.Bytecode.ActivatorObjectsFactory.Creat eInstance(類型) 在NHibernate.Connection.ConnectionProvider。ConfigureDriver(IDictionary`2設置) InnerException:NHibernate.HibernateException Message =無法找到程序集Oracle.DataAccess中的IDbCommand和IDbConnection實現。確保程序集Oracle.DataAccess位於應用程序目錄或全局程序集緩存中。如果程序集位於GAC中,請使用應用程序配置文件中的元素指定程序集的全名。 源= NHibernate的 堆棧跟蹤: 在NHibernate.Driver.ReflectionBasedDriver..ctor(字符串driverAssemblyName,字符串connectionTypeName,字符串commandTypeName) 在NHibernate.Driver.OracleDataClientDriver..ctor() 的InnerException:

+0

爲什麼這是一個wiki? – DCookie 2010-07-16 16:27:22

+0

我誤點了它。抱歉。我如何刪除維基旗幟? – 2010-07-16 16:47:35

+0

你不能。您只能刪除並重新發布。這不是什麼大不了的事情,如果它被高估了,你就不會獲得任何聲望點。 – DCookie 2010-07-16 18:44:08

回答

7

我計算出來。當您引用ODP時,您必須將引用的copy local屬性設置爲true,否則它將找不到要查找的對象。

一個障礙,我敢肯定會有更多,但我很喜歡這些工具!

保羅

0

如果你有ODP DLL的平臺和應用程序(86 VS 64)的平臺之間的不匹配也可能得到這個問題。將您的項目更改爲針對正確的平臺進行編譯。