Versioni utilizzate:
- Debian 4.0/Ubuntu 9.10
- NHibernate 2.1.1.400
- Postgres 8.3
- .NET/Mono 2.4.4/2.6.4/2.7
Recentemente ho migrato una applicazione da NHibernate 1.2 alla più recente 2.1.2. Dopo un rapido refactoring per rinominare il necessario e rispettare i nuovi namespace mi sono imbatutto nel seguente errore:
System.InvalidCastException: Cannot cast from source type to destination type. at NHibernate.Tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.Prepare () [0x00000] in <filename unknown>:0 at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords (NHibernate.Dialect.Dialect dialect, IConnectionHelper connectionHelper) [0x00000] in <filename unknown>:0 at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update (ISessionFactory sessionFactory) [0x00000] in <filename unknown>:0 at NHibernate.Impl.SessionFactoryImpl..ctor (NHibernate.Cfg.Configuration cfg, IMapping mapping, NHibernate.Cfg.Settings settings, NHibernate.Event.EventListeners listeners) [0x00000] in <filename unknown>:0 at NHibernate.Cfg.Configuration.BuildSessionFactory () [0x00000] in <filename unknown>:0 [...]
Le righe inferiori dello stack fanno riferimento al codice non-NHibernate, la prima di queste punta alla riga dove viene tirata su la Session dalla SessionFactory(). Dopo un po' di mezz'ore a controllare e ricontrollare (e a rileggere le note di rilascio) ho cercato su San Google ed ho trovato che è un tipo errore causato dall'errata impostazione della proprietà hbm2ddl.
L'autoquoting pare non piacere in qualche modo. Impostando la proprietà a none l'errore non viene più sollevato.