From da6a636247a446c2fbd8d23f4fc10787149a281c Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 17 Mar 2014 11:31:03 -0700 Subject: [PATCH] Fixing OutOfMemory exception when using PrepareSql The PrepareSql is defined only for Sql Server right now, using a new steps DateServiceProviders to customize nhibernate properties. Work Items: 20563, 20550 --- .../Data/Providers/AbstractDataServicesProvider.cs | 10 ++++++++-- .../Data/Providers/SqlServerDataServicesProvider.cs | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs b/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs index 2d77869f8..f387f7d4f 100644 --- a/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs +++ b/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Configuration; using System.Linq; using FluentNHibernate; using FluentNHibernate.Automapping; @@ -48,7 +47,6 @@ namespace Orchard.Data.Providers { .SetProperty(NHibernate.Cfg.Environment.FormatSql, Boolean.FalseString) .SetProperty(NHibernate.Cfg.Environment.GenerateStatistics, Boolean.FalseString) .SetProperty(NHibernate.Cfg.Environment.Hbm2ddlKeyWords, Hbm2DDLKeyWords.None.ToString()) - .SetProperty(NHibernate.Cfg.Environment.PrepareSql, Boolean.TrueString) .SetProperty(NHibernate.Cfg.Environment.PropertyBytecodeProvider, "lcg") .SetProperty(NHibernate.Cfg.Environment.PropertyUseReflectionOptimizer, Boolean.TrueString) .SetProperty(NHibernate.Cfg.Environment.QueryStartupChecking, Boolean.FalseString) @@ -62,6 +60,10 @@ namespace Orchard.Data.Providers { cfg.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[0]; cfg.EventListeners.PreLoadEventListeners = new IPreLoadEventListener[0]; + // don't enable PrepareSql by default as it breaks on SqlCe + // this can be done per driver by overriding AlterConfiguration + AlterConfiguration(cfg); + parameters.Configurers.Invoke(c => c.Building(cfg), Logger); }) @@ -72,6 +74,10 @@ namespace Orchard.Data.Providers { return config.BuildConfiguration(); } + protected virtual void AlterConfiguration(Configuration config) { + + } + public static AutoPersistenceModel CreatePersistenceModel(ICollection recordDescriptors) { if(recordDescriptors == null) { throw new ArgumentNullException("recordDescriptors"); diff --git a/src/Orchard/Data/Providers/SqlServerDataServicesProvider.cs b/src/Orchard/Data/Providers/SqlServerDataServicesProvider.cs index 1e1310aa8..c7dbd6b61 100644 --- a/src/Orchard/Data/Providers/SqlServerDataServicesProvider.cs +++ b/src/Orchard/Data/Providers/SqlServerDataServicesProvider.cs @@ -1,5 +1,6 @@ using System; using FluentNHibernate.Cfg.Db; +using NHibernate.Cfg; using NHibernate.SqlAzure; namespace Orchard.Data.Providers { @@ -32,5 +33,9 @@ namespace Orchard.Data.Providers { return persistence; } + + protected override void AlterConfiguration(Configuration config) { + config.SetProperty(NHibernate.Cfg.Environment.PrepareSql, Boolean.TrueString); + } } } \ No newline at end of file