NHibernate с приложением Windows - PullRequest
1 голос
/ 19 сентября 2010

Просматривая StackOverflow, этот вопрос, кажется, задают много, но я перепробовал все перечисленное и, похоже, ни один из них не заработал.

Я сейчас пытаюсь использовать NHibernate в приложении Windowsнаписано в C # на .NET 4.0.Моя текущая целевая платформа - x86, и я подтвердил, что я использую x86 System.Data.SQLite, и я настроил его для локального копирования.Моя текущая операционная система - Windows 7 x64.

У меня также есть сборка, которая использует NHibernate и взаимодействует с базой данных, и именно когда я пытаюсь вызвать ее, я получаю следующую ошибку:

************** Exception Text **************
NHibernate.HibernateException: Could not create the driver from NHibernate.Driver.SQLite20Driver. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> NHibernate.HibernateException: The IDbCommand and IDbConnection implementation in the assembly System.Data.SQLite could not be found. Ensure that the assembly System.Data.SQLite is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use <qualifyAssembly/> element in the application configuration file to specify the full name of the assembly.
   at NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName)
   at NHibernate.Driver.SQLite20Driver..ctor()
   --- End of inner exception stack trace ---
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type)
   at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
   --- End of inner exception stack trace ---
   at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
   at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings)
   at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings)
   at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties)
   at NHibernate.Cfg.Configuration.BuildSettings()
   at NHibernate.Cfg.Configuration.BuildSessionFactory()
   at Surrix.Cerberus.YouthData.Respositories.NHibernateHelper.get_SessionFactory() in D:\development\Cerberus\YouthData\Respositories\NHibernateHelper.cs:line 20
   at Surrix.Cerberus.YouthData.Respositories.NHibernateHelper.OpenSession() in D:\development\Cerberus\YouthData\Respositories\NHibernateHelper.cs:line 29
   at Surrix.Cerberus.YouthData.Respositories.YouthRepository.GetYouthByLastName(String lastName) in D:\development\Cerberus\YouthData\Respositories\YouthRepository.cs:line 41
   at Surrix.Cerberus.YouthCheckinUI.YouthCheckinMainForm.searchButton_Click(Object sender, EventArgs e) in D:\development\Cerberus\YouthCheckinUI\YouthCheckinMainForm.cs:line 31
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Я не могу понять, что именно здесь делать.Если кто-то испытывал это раньше, пожалуйста, помогите.

Ниже приведен мой файл конфигурации Hibernate.Опять же, это работает при модульном тестировании, но не при его использовании в приложении Windows:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
    <property name="connection.connection_string">
      Data Source=D:\\development\\cerberus\\test.s3db;Version=3
    </property>
    <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
    <property name="query.substitutions">true=1;false=0</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>

    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

Ответы [ 2 ]

2 голосов
/ 19 сентября 2010

Проверьте эту статью SO, похоже, это проблема с конкретной целью сборки, на которую ссылаются.

Версия SQL.Data.SqlLite с NHibernate 2.1

0 голосов
/ 19 сентября 2010

Понятия не имею, почему это работает в тесте NUnit, но не в приложении WPF, а с добавлением:

useLegacyV2RuntimeActivationPolicy="true"

, чтобы твой стартовый тег в app.config исправил мою проблему. Мой app.config теперь выглядит так:

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">     
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...