Использование задач FluentNHibernate + SQLite с.NET4?

У меня есть приложение WPF, работающее с использованием VS2010.Net3.5 Nhibernate с FluentNHibernate + SQLite, и все хорошо работает.

Теперь я хочу измениться на использование.Net4, но это превратилось в более болезненный опыт затем, я ожидал.. При установке соединения я делаю это:

var cfg = Fluently.Configure().
    Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("MyDb.db")).
    Mappings(m => m.FluentMappings.AddFromAssemblyOf());
_sessionFactory = cfg.BuildSessionFactory();                    

BuildSessionFactory () вызов бросает высказывание FluentConfigurationException:

Недопустимая или неполная конфигурация использовалась при создании SessionFactory. Проверьте набор PotentialReasons и InnerException для получения дополнительной информации.

Внутреннее исключение дает нам больше информации:

Не удалось создать драйвер из NHibernate. Драйвер. SQLite20Driver, NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.

И дальнейший InnerException:

Реализация IDbCommand и IDbConnection в системе сборки. Данные. SQLite не мог быть найден. Удостоверьтесь что система сборки. Данные. SQLite расположен в каталоге приложения или в Глобальном кэше сборок. Если блок находится в GAC, используйте элемент в файле конфигурации приложения для определения полного имени блока.

Теперь - мне это кажется, что не находит System.Data.SQLite.dll, но я не могу понять это. Везде на это ссылаются, у меня есть "Копия, Локальная", и я проверил, что это находится в каждой папке сборки для проектов с помощью SQLite. Я также скопировал его вручную в каждую Папку отладки решения - без удачи.

Примечания:

  • Это - точно тот же код, который работал просто великолепно, прежде чем я обновил до.Net4.
  • Я действительно видел, что некоторый x64 x86 не соответствовал проблемам ранее, но я переключился для использования x86 в качестве целевой платформы, и для всех сослался на dlls. Я проверил, что все файлы в Папке отладки являются x86.
  • Я попробовал предварительно скомпилированный Быстрый dlls, я попытался компилировать меня, и я скомпилировал свою собственную версию Быстрого использования.Net4.
  • Я вижу, что существуют также другие, которые видели эту проблему, но я еще действительно не видел решения.

После ответа @devio я пытался добавить ссылку на SQLite dll. Это ничего не изменило, но я надеюсь, что сделал это правом хотя.. Это - то, что я добавил к корневому узлу app.config файла:


    
        
    

Кто-либо туда использование Быстрого с.Net4 и SQLite успешно?На помощь!Я заблудился...

12
задан stiank81 27 April 2010 в 13:24
поделиться

4 ответа

Проверьте версию ссылки на System.Data. Мне кажется, что System.Data.SqlLite не может найти версию IDbCommand и IDbConnection, с которой он был построен, и, как я подозреваю, это версия 2.0.0.0. Я подозреваю, что теперь вы обновились до .Net 4, вы ссылаетесь на System.Data версии 4.0.0.0.

Если это так, вы должны иметь возможность добавить перенаправление привязки для решения проблемы:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089"/>
        <bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>
7
ответ дан 2 December 2019 в 18:18
поделиться

У меня была аналогичная проблема с NH, VS2010, .Net4, но с драйверами Oracle ODP.Net и 32-битными.

Решением было объявить «квалифицированную сборку» в файле web.config с явным номером версии. См. Мою сводку .

Возможно, это решение применимо и к вашей проблеме.

2
ответ дан 2 December 2019 в 18:18
поделиться

Я также получал такое же сообщение об ошибке, когда пробовал Fluent с .Net4 и SQLite, но когда я присмотрелся, нашел другое сообщение об ошибке.

Не удалось загрузить тип System.Data.SQLite.SQLiteConnection, System.Data.SQLite. System.IO.FileLoadException: сборка смешанного режима создана для версии v2.0.50727 среды выполнения и не может быть загружается во время выполнения 4.0 без дополнительной информации о конфигурации.

Я добавил useLegacyV2RuntimeActivationPolicy = "true" в тег "startup" следующим образом.

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

Мне не нужно добавлять зависимую сборку или что-то еще внутри тега runtime. Согласно тексту ссылки и тексту ссылки , его следует использовать только для помощи в миграции. Надеюсь, SQLite скоро будет обновлен.

Надеюсь, это поможет! Карлким

8
ответ дан 2 December 2019 в 18:18
поделиться

Мне удалось решить эту проблему, изменив целевую платформу на x86 в настройках отладки проекта. Я использую vs2010.

2
ответ дан 2 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: