Свободный NHibernate - настройка поставщика данных Oracle ODP - PullRequest
5 голосов
/ 16 июля 2010

Я новичок в 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 Трассировки стека: в FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory () в d: \ Builds \ FluentNH \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs: строка 98 в HibernateLearning.Program.CreateSessionFactory () в C: \ Projects \ Концепции тестирования CPS \ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs: строка 48 в HibernateLearning.Program.Main (String [] args) в C: \ Projects \ CPS Test Concepts \ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs: строка 21 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, аргументы String []) в System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart () InnerException: NHibernate.HibernateException Сообщение = Не удалось создать драйвер из NHibernate.Driver.OracleDataClientDriver, NHibernate, Версия = 2.1.2.4000, Культура = нейтральный, 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 Сообщение = Исключение было сгенерировано целью вызова. Источник = mscorlib Трассировки стека: at System.RuntimeTypeHandle.CreateInstance (тип RuntimeType, логический publicOnly, логический noCheck, логический & canBeCached, RuntimeMethodHandleInternal & ctor, логический & bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow (логическое publicOnly, логическое skipCheckThis, логическое fillCache) at System.RuntimeType.CreateInstanceDefaultCtor (логическое значение publicOnly, логическое значение skipVisibilityChecks, логическое значение skipCheckThis, логическое значение fillCache) в System.Activator.CreateInstance (Тип тип, логическое не публичное) в System.Activator.CreateInstance (Тип тип) в NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance (Тип тип) в NHibernate.Connection.ConnectionProvider.ConfigureDriver (настройки IDictionary`2) InnerException: NHibernate.HibernateException Сообщение = Реализация IDbCommand и IDbConnection в сборке Oracle.DataAccess не найдена. Убедитесь, что сборка Oracle.DataAccess находится в каталоге приложения или в глобальном кэше сборок. Если сборка находится в GAC, используйте элемент в файле конфигурации приложения, чтобы указать полное имя сборки. Источник = NHibernate Трассировки стека:в NHibernate.Driver.ReflectionBasedDriver..ctor (String driverAssemblyName, String connectionTypeName, String commandTypeName) в NHibernate.Driver.OracleDataClientDriver..ctor () InnerException:

Ответы [ 2 ]

7 голосов
/ 20 июля 2010

Я понял это.Когда вы ссылаетесь на ODP, вы должны установить локальное свойство copy ссылки на true, иначе он не найдет искомые объекты.

Одно препятствие, я уверен, что будет больше, но я люблю эти инструменты!

Пол

0 голосов
/ 04 марта 2011

Вы также можете получить эту проблему, если у вас есть несоответствие между платформами библиотеки ODP и платформой вашего приложения (x86 против x64). Измените свой проект для компиляции с правильной платформой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...