nhibernate syscache

NHibernate 3.3 y SysCache



(2)

El problema probablemente es que la Dll de SysCache se construye con NHibernate 3.2.0 y no es compatible con NHibernate 3.3.0. Una forma fácil de evitar esto es verificar el troncal del proyecto de configuración nhibernate o la solución de caché solo desde https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Caches actualiza la referencia de NHibernate para usar la versión que está utilizando y luego reconstruir y usar las últimas dlls de caché. Dado que es una actualización menor, no debe haber ningún cambio de código requerido y usted debe estar seguro.

Pruébalo y déjame saber cómo va.

La versión actual de SysCache no parece funcionar con NHibernate 3.3. Reemplacé las dlls de NHibernate en mi directorio web / bin y dejé la dll de SysCache (que funciona con 3.2) sin tocar. Ahora, cuando IIS intenta realizar un enlace previo, carga la dll de SysCache e intenta vincularlo a NHibernate 3.2.0.4000 y falla.

[FileLoadException: no se pudo cargar el archivo o el ensamblaje ''NHibernate, Version = 3.2.0.4000, Culture = neutral, PublicKeyToken = aa95f207798dfdb4'' o una de sus dependencias. La definición del manifiesto del ensamblaje localizado no coincide con la referencia del ensamblaje. (Excepción de HRESULT: 0x80131040)] System.RuntimeTypeHandle.GetTypeByName (Nombre de cadena, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, Cajas, Paquetes, Paquetes, Luces, Boolean loadTypeFromPartialName
System.RuntimeTypeHandle.GetTypeByName (Nombre de cadena, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark & ​​stackMark, Boolean loadTypeFromPartialName) +95
System.RuntimeType.GetType (String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark y stackMark) +54 SystemGr.
NHibernate.Cfg.SettingsFactory.CreateCacheProvider (propiedades de IDictionary`2) +175

[HibernateException: no se pudo crear una instancia de CacheProvider: NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache]
NHibernate.Cfg.SettingsFactory.CreateCacheProvider ( 2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
IDictionary 2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
propiedades de 2 properties) +256
NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary
2) +3449 NHibernate.Cfg.Configuration.BuildSettings () +29 NHibernate.Cfg.Configuration.BuildSessionFactory () +44

Si comento la configuración en la web.config todo está bien:

<property name="cache.use_second_level_cache">true</property> <property name="cache.use_query_cache" >true</property> <property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>

El sitio de descarga para cachés NHibernate en NHibernate Contrib no tiene una descarga para la última versión.


Un enfoque diferente y un poco más simple es anular la referencia a la versión 3.2 de NHibernate en su web.config o app.config con una referencia a la versión 3.3 deseada así:

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4" /> <bindingRedirect newVersion="3.3.0.4000" oldVersion="0.0.0.0-3.3.0.4000" /> </dependentAssembly> </assemblyBinding> </runtime>

Acabo de intentar esto yo mismo y funciona como se esperaba.