我是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:
答案 0 :(得分:7)
我明白了。当您引用ODP时,您必须将引用的copy local属性设置为true,否则它将找不到它要查找的对象。
一个障碍,我相信会有更多,但我喜欢这些工具!
保
答案 1 :(得分:0)
如果ODP dll的平台与应用程序平台(x86 vs x64)不匹配,也可能会出现此问题。更改项目以针对正确的平台进行编译。