2010-11-07 15 views
8

tengo problema con esta excepción:NHibernate + SqlServerCe

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. 

he intentado todo. Busqué en Google mucho.

System.Data.SqlServerCe.dll está en el directorio de depuración. Se hace referencia local, no es GAC. He copiado el conjunto local verdadero. En el directorio de depuración está todo lo demás necesario sql * .dll. Intenté la compilación x86 pero no mucho.

Ésta es mi nhibernate config:

<?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> 

versión NHibernate 3.0 beta 1, versión SqlServerCe 3.5 SP1

Mi idea: Nhibernate todavía se ven en la GAC, lástima pues un habían instalado SqlServerCe, después de desinstalar el el problema comienza ¿Cómo puedo decirle a NHibernate: "por favor, mira tomar este dll?" :)

+0

Podría traducir 'Cíl vyvolání způsobil výjimku.'? –

+0

Lo siento :) Se me olvida. Corregido – Simon

Respuesta

11

Usted (o el NHibernate dll) están haciendo referencia a una versión diferente de System.Data.SqlServerCe dll en el proyecto de lo que está esperando. Por ejemplo, NHibernate puede estar haciendo referencia a la versión .NET 3.5 de la dll, pero tiene la versión .NET 4.0 de la dll en el directorio GAC o bin local. Puede indicar al .NET Framework que use un AssemblyBinding específico para corregir el problema. Escriba lo siguiente en su archivo de configuración para solucionarlo.

<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> 

+1

1 Este es el *respuesta correcta. –

+1

funcionó para mí también. – rohancragg

+1

No lo necesitaba en la versión más reciente de nHibernate, pero no pude reemplazar una versión anterior y esto solucionó mi problema. – Devgig

0

Intenta cargar el ensamblaje con Assembly.LoadFile con la ruta completa de la DLL antes de que NHibernate lo solicite.

NHibernate cargará el conjunto utilizando Assembly.Load("NHibernate.Driver.SqlServerCeDriver") que probablemente se verá en el GAC. Si fuerza cargarlo desde un archivo, el Assembly.Load se dará cuenta de que ya está cargado y elegirá el que cargó.

+0

Recibo este error: System.IO.FileLoadException: No se pudo cargar el archivo o ensamblado 'System.Data.SqlServerCe, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91 o una de sus dependencias. El sistema no puede encontrar el archivo especificado. Intenté cargar dll dependiente, pero aparece este error cuando intento cargar sqlceca35.dll: System.BadImageFormatException: El módulo debe contener el manifiesto de ensamblaje. (Excepción a HRESULT: 0x80131018) – Simon

+0

Su comentario no tiene el mensaje de error. –

+0

Lo siento :) Corregido ... – Simon

-1

Cambié a sqllite. Eso es trabajo Tal vez considere cambiar el código de bytes. Utilicé el código de bytes de primavera, tal vez el castillo es mejor ...

0

También puede establecer el uso de la bandera versión específica de falsa sobre las propiedades de VS para esa referencia y establecer copia local a la verdadera