NHibernate con Medium Trust
NHibernate è la versione .NET del famoso Hibernate, un ORM (Object Relational Mapping) per Java molto usato. Detto molto semplicemente, Hibernate è un framework che si occupa della persistenza di classi su database relazionali, come ad es. SQL Server, Oracle, MySQL, ecc.
Ultimamente la maggior parte dei provider di spazio web su server Windows sta utilizzando delle impostazioni di protezione più restrittive, dette Medium Trust. In un ambiente con tali impostazioni di protezione, NHibernate non funziona, a meno che non si effettuino due semplici modifiche al file di configurazione.
In particolare va aggiunto l’attributo requirePermission=”false” al tag <section> ed un ulteriore tag <add key=”hibernate.use_reflection_optimizer” value=”false”/> sotto il tag <nhibernate>.
Un esempio di configurazione per SQL Server, funzionante in Medium Trust, è il seguente:
<configSections>
<section name="nhibernate" requirePermission=”false”
type=”System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″/>
</configSections>
<nhibernate>
<add key=”hibernate.connection.provider” value=”NHibernate.Connection.DriverConnectionProvider”/>
<add key=”hibernate.dialect” value=”NHibernate.Dialect.MsSql2000Dialect”/>
<add key=”hibernate.connection.driver_class” value=”NHibernate.Driver.SqlClientDriver”/>
<add key=”hibernate.connection.connection_string” value=”Server=localhost;initial catalog=NomeDB”/>
<add key=”hibernate.use_reflection_optimizer” value=”false”/>
</nhibernate>
In grassetto sono evidenziati gli elementi che consentono il funzionamento in Medium Trust.
Per poter utilizzare anche in locale i livelli di protezione Medium Trust, è sufficiente aggiungere il tag <trust level=”Medium”/> subito sotto il tag <system.web>.
Va detto infine che non è possibile utilizzare i proxy e quindi è anche necessario disabilitare la logica lazy nei file di mappatura delle classi. Per farlo è sufficiente aggiungere l’attributo default-lazy=”false” nel tag <hibernate-mapping> presente nei file hbm.xml.
Per utilizzare anche log4net vi rimando al seguente articolo:
http://www.topxml.com/XML/re-37980_Configuring-Log4Net-with-ASP-NET-2-0-in-Medium-Trust.aspx