Nhibernate does not work after upgrade to version 2.1.2
I recently changes my NHibernate implementation from Version 2.1.0 to 2.1.2. For lazy loading I used the LinFu implementation using : NHibernate.ByteCode.Linfu.
Since I changed to the newest version I got the following error:
[SecurityException: That assembly does not allow partial开发者_运维技巧ly trusted callers.]
NHibernate.ByteCode.LinFu.ProxyFactory..cctor() +0
When debugging I came to the following error:
at NHibernate.ByteCode.LinFu.ProxyFactory..ctor()
at NHibernate.ByteCode.LinFu.ProxyFactoryFactory.BuildProxyFactory()
at NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildProxyFactoryInternal(PersistentClass class, IGetter getter, ISetter setter)
at NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildProxyFactory(PersistentClass persistentClass, IGetter idGetter, ISetter idSetter)
at NHibernate.Tuple.Entity.AbstractEntityTuplizer..ctor(EntityMetamodel entityMetamodel, PersistentClass mappingInfo)
at NHibernate.Tuple.Entity.PocoEntityTuplizer..ctor(EntityMetamodel entityMetamodel, PersistentClass mappedEntity)
at NHibernate.Tuple.Entity.EntityEntityModeToTuplizerMapping..ctor(PersistentClass mappedEntity, EntityMetamodel em)
at NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass, ISessionFactoryImplementor sessionFactory)
at NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory)
at NHibernate.Persister.Entity.SingleTableEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping mapping)
at NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass model, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping cfg)
at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
at NHibernate.Cfg.Configuration.BuildSessionFactory()
at MyApplication.SessionManager..ctor() in C:\Projects\MyApps\MyApplication\SessionManager.cs:line 75
Is this because of the usage of NHibernate.ByteCode.LinFu? What can I do about it to make the application work again?
In cases where you have different version of references i.e. 2.1.0 and 2.1.2 you can configure .net to redirect calls from the old to the new or vice versa using assembly redirects...
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Linfu.DynamicProxy"
publicKeyToken="32cd8f1a53a4c744"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="1.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
However I don't think this is the problem as the error is quite different. i.e. Security Exception. "That assembly does not allow partially trusted callers" seems to indicate that whatever process is running doesn't have the necessary context permissions to execute the code in the method "NHibernate.ByteCode.LinFu.ProxyFactory..ctor()". Potentially you are running an application using Client Profile or in a "Partially Trusted" web hosted environment.
Do you have more information about the context you are running this application in?
精彩评论