From 605cf7a39fe8452ad24a22aac9a30204a069fff5 Mon Sep 17 00:00:00 2001 From: maca88 Date: Fri, 28 Dec 2018 16:23:26 +0100 Subject: [PATCH] Cache Dialect when creating a session factory --- src/NHibernate/Cfg/Configuration.cs | 36 ++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/NHibernate/Cfg/Configuration.cs b/src/NHibernate/Cfg/Configuration.cs index 6b70fa340a2..0ff46e9f41b 100644 --- a/src/NHibernate/Cfg/Configuration.cs +++ b/src/NHibernate/Cfg/Configuration.cs @@ -239,6 +239,40 @@ public bool HasNonIdentifierPropertyNamedId(string className) NHibernate.Dialect.Dialect.GetDialect(configuration.Properties); } + [Serializable] + private class StaticDialectMappingWrapper : IMapping + { + private readonly IMapping _mapping; + + public StaticDialectMappingWrapper(IMapping mapping) + { + _mapping = mapping; + Dialect = mapping.Dialect; + } + + public IType GetIdentifierType(string className) + { + return _mapping.GetIdentifierType(className); + } + + public string GetIdentifierPropertyName(string className) + { + return _mapping.GetIdentifierPropertyName(className); + } + + public IType GetReferencedPropertyType(string className, string propertyName) + { + return _mapping.GetReferencedPropertyType(className, propertyName); + } + + public bool HasNonIdentifierPropertyNamedId(string className) + { + return _mapping.HasNonIdentifierPropertyNamedId(className); + } + + public Dialect.Dialect Dialect { get; } + } + private IMapping mapping; protected Configuration(SettingsFactory settingsFactory) @@ -1272,7 +1306,7 @@ public ISessionFactory BuildSessionFactory() // Ok, don't need schemas anymore, so free them Schemas = null; - return new SessionFactoryImpl(this, mapping, settings, GetInitializedEventListeners()); + return new SessionFactoryImpl(this, new StaticDialectMappingWrapper(mapping), settings, GetInitializedEventListeners()); } ///