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

5

我是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 消息=在创建SessionFactory时使用了无效或不完整的配置。检查PotentialReasons集合和InnerException以获取更多详细信息。

来源=FluentNHibernate 堆栈跟踪: 在d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs的FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()行98 在C:\Projects\CPS Test Concepts\Main\Source\CPSTestConcepts\Source\HibernateLearning\Program.cs的HibernateLearning.Program.CreateSessionFactory()行48 在C:\Projects\CPS Test Concepts\Main\Source\CPSTestConcepts\Source\HibernateLearning\Program.cs的HibernateLearning.Program.Main(String[] args)行21 在System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 在System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在System.Threading.ThreadHelper.ThreadStart() 内部异常:NHibernate.HibernateException 消息=无法从NHibernate.Driver.OracleDataClientDriver、NHibernate、Version=2.1.2.4000、Culture=neutral、PublicKeyToken=aa95f207798dfdb4创建驱动程序。 来源=NHibernate 堆栈跟踪: 在NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings) 在NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings) 在NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings) 在NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties) 在NHibernate.Cfg.Configuration.BuildSettings() 在NHibernate.Cfg.Configuration.BuildSessionFactory() 在d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs的FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()行93 内部异常:System.Reflection.TargetInvocationException 消息=已在调用目标上引发异常。 来源=mscorlib 堆栈跟踪: 在System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) 在System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) 在System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) 在System.Activator.CreateInstance(Type type, Boolean nonPublic) 在System.Activator.CreateInstance(Type type) 在NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type) 在NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings) 内部异常:NHibernate.HibernateException 消息=无法找到程序集Oracle.DataAccess中的IDbCommand和IDbConnection实现。确保程序集Oracle.DataAccess位于应用程序目录或全局程序集缓存中。如果程序集在GAC中,请使用<assemblyBinding>元素在应用程序配置文件中指定程序集的完整名称。 来源=NHibernate 堆栈跟踪: 在NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName) 在NHibernate.Driver.OracleDataClientDriver..ctor() 内部异常:


我误点击了它。抱歉。我该如何移除维基标志? - Paul Speranza
你不能修改,只能删除并重新发布。这不是什么大不了的事情,如果被点赞了,你就不会获得任何声望分数。 - DCookie
2个回答

7
我想通了。当你引用ODP时,必须将引用的复制本地属性设置为true,否则它无法找到正在寻找的对象。
一个障碍已经克服,我相信还会有更多,但我喜欢这些工具!
保罗

0
如果你的应用程序平台(x86 vs x64)与ODP dll的平台不匹配,你可能会遇到这个问题。请将项目更改为针对正确的平台进行编译。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接