NHibernate + SqlServerCE - PullRequest
       1

NHibernate + SqlServerCE

8 голосов
/ 07 ноября 2010

У меня проблема с этим исключением:

Hibernate.HibernateException : Could not create the driver from Hibernate.Driver.SqlServerCeDriver.
----> System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
----> NHibernate.HibernateException : The IDbCommand and IDbConnection implementation in the  ssembly System.Data.SqlServerCe could not be found. Ensure that the assembly System.Data.SqlServerCe 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.

Я попробовал все. Я много гуглил.

System.Data.SqlServerCe.dll находится в каталоге отладки. Местные ссылки, не я GAC. У меня есть копия локального набора true. В каталоге отладки есть все остальные необходимые sql * .dll. Я попробовал компиляцию x86, но не очень.

Это мой конфиг nhibernate:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>

    <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Spring.ProxyFactoryFactory, NHibernate.ByteCode.Spring</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property>

    <property name="show_sql">true</property>


    <!-- mapping files -->

  </session-factory>
</hibernate-configuration>

NHibernate версия 3.0 бета 1, SqlServerCe версия 3.5 SP1

Моя идея: Nhibernate все еще смотрит в GAC, потому что у него был установлен SqlServerCe, после удаления начинается проблема. Как я могу сказать NHibernate: «Пожалуйста, посмотрите, возьмите эту DLL?»:)

Ответы [ 4 ]

11 голосов
/ 29 октября 2011

Вы (или dll NHibernate) ссылаетесь на другую версию dll System.Data.SqlServerCe в проекте, отличную от ожидаемой. Например, NHibernate может ссылаться на версию dll .NET 3.5, но у вас есть версия dll .NET 4.0 в каталоге GAC или в локальном каталоге bin. Вы можете дать указание .NET Framework использовать определенную AssemblyBinding для устранения проблемы. Введите следующее в ваш конфигурационный файл, чтобы исправить это.

    <runtime>
    <assemblyBinding 
    xmlns="urn:schemas-microsoft-com:asm.v1"><qualifyAssembly 
   partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, 
   Version=3.5.1.0, Culture=neutral, 
   PublicKeyToken=89845dcd8080cc91"/>
    </assemblyBinding>
   </runtime> 

0 голосов
/ 13 сентября 2012

Вы также можете установить флаг использования определенной версии в false для свойств в VS для этой ссылки и установить для локального копирования значение true

0 голосов
/ 07 декабря 2010

Я перешел на sqllite.Это работает.Может быть, рассмотреть вопрос об изменении байтового кода.Я использовал весенний байт-код, возможно, замок лучше ....

0 голосов
/ 07 ноября 2010

Попробуйте загрузить сборку с помощью Assembly.LoadFile с полным путем к DLL, прежде чем NHibernate запросит ее.

NHibernate загрузит сборку, используя Assembly.Load("NHibernate.Driver.SqlServerCeDriver"), который, вероятно, будет выглядеть в GAC.Если вы заставите его загрузить файл, Assembly.Load заметит, что он уже загружен, и выберет тот, который вы загрузили.

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