diff --git a/src/NHibernate.Test/App.config b/src/NHibernate.Test/App.config
index 1e1078fe6f3..188524f7d1d 100644
--- a/src/NHibernate.Test/App.config
+++ b/src/NHibernate.Test/App.config
@@ -51,6 +51,8 @@
true
false
444
+
+ Commit
diff --git a/src/NHibernate.Test/CfgTest/DefaultFlushModeFixture.cs b/src/NHibernate.Test/CfgTest/DefaultFlushModeFixture.cs
new file mode 100644
index 00000000000..ef569879acb
--- /dev/null
+++ b/src/NHibernate.Test/CfgTest/DefaultFlushModeFixture.cs
@@ -0,0 +1,82 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NHibernate.Cfg;
+using NUnit.Framework;
+
+namespace NHibernate.Test.CfgTest
+{
+ [TestFixture]
+ public class DefaultFlushModeFixture
+ {
+ [Test]
+ public void CanSetDefaultFlushModeThroughXmlConfiguration()
+ {
+ var cfg = new Configuration().Configure();
+
+ using (var sessionFactory = cfg.BuildSessionFactory())
+ {
+ using (var session = sessionFactory.OpenSession())
+ {
+ Assert.AreEqual(session.FlushMode, FlushMode.Commit);
+ }
+ }
+ }
+
+ [Test]
+ public void CanSetDefaultFlushModeThroughStandardConfiguration()
+ {
+ var cfg = new Configuration().Configure();
+ cfg.Properties[Environment.DefaultFlushMode] = FlushMode.Always.ToString();
+
+ using (var sessionFactory = cfg.BuildSessionFactory())
+ {
+ using (var session = sessionFactory.OpenSession())
+ {
+ Assert.AreEqual(session.FlushMode, FlushMode.Always);
+ }
+ }
+
+ cfg.Properties[Environment.DefaultFlushMode] = FlushMode.Commit.ToString();
+
+ using (var sessionFactory = cfg.BuildSessionFactory())
+ {
+ using (var session = sessionFactory.OpenSession())
+ {
+ Assert.AreEqual(session.FlushMode, FlushMode.Commit);
+ }
+ }
+ }
+
+ [Test]
+ public void CanSetDefaultFlushModeThroughLoquaciousConfiguration()
+ {
+ var cfg = new Configuration()
+ .Configure();
+
+ cfg
+ .SessionFactory()
+ .DefaultFlushMode(FlushMode.Always);
+
+ using (var sessionFactory = cfg.BuildSessionFactory())
+ {
+ using (var session = sessionFactory.OpenSession())
+ {
+ Assert.AreEqual(session.FlushMode, FlushMode.Always);
+ }
+ }
+
+ cfg.Configure()
+ .SessionFactory()
+ .DefaultFlushMode(FlushMode.Commit);
+
+ using (var sessionFactory = cfg.BuildSessionFactory())
+ {
+ using (var session = sessionFactory.OpenSession())
+ {
+ Assert.AreEqual(session.FlushMode, FlushMode.Commit);
+ }
+ }
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj
index a8d325494c7..899d28f1760 100644
--- a/src/NHibernate.Test/NHibernate.Test.csproj
+++ b/src/NHibernate.Test/NHibernate.Test.csproj
@@ -147,6 +147,7 @@
+
@@ -3630,4 +3631,4 @@ if exist hibernate.cfg.xml (del hibernate.cfg.xml)
if exist "$(ProjectDir)hibernate.cfg.xml" (copy "$(ProjectDir)hibernate.cfg.xml" "hibernate.cfg.xml")
copy /y "..\..\..\NHibernate.DomainModel\ABC.hbm.xml" "ABC.hbm.xml"
-
+
\ No newline at end of file
diff --git a/src/NHibernate/Cfg/Environment.cs b/src/NHibernate/Cfg/Environment.cs
index 694e4679684..91f0ca0f48f 100644
--- a/src/NHibernate/Cfg/Environment.cs
+++ b/src/NHibernate/Cfg/Environment.cs
@@ -90,6 +90,9 @@ public static string Version
/// The EntityMode in which set the Session opened from the SessionFactory.
public const string DefaultEntityMode = "default_entity_mode";
+ /// Implementation of NH-3619 - Make default value of FlushMode configurable
+ public const string DefaultFlushMode = "default_flush_mode";
+
///
/// When using an enhanced id generator and pooled optimizers (),
/// prefer interpreting the database value as the lower (lo) boundary. The default is to interpret it as the high boundary.
diff --git a/src/NHibernate/Cfg/Loquacious/FluentSessionFactoryConfiguration.cs b/src/NHibernate/Cfg/Loquacious/FluentSessionFactoryConfiguration.cs
index 316c4dbf323..56a2f73635c 100644
--- a/src/NHibernate/Cfg/Loquacious/FluentSessionFactoryConfiguration.cs
+++ b/src/NHibernate/Cfg/Loquacious/FluentSessionFactoryConfiguration.cs
@@ -46,6 +46,12 @@ public IFluentSessionFactoryConfiguration Using(EntityMode entityMode)
return this;
}
+ public IFluentSessionFactoryConfiguration DefaultFlushMode(FlushMode flushMode)
+ {
+ configuration.SetProperty(Environment.DefaultFlushMode, flushMode.ToString());
+ return this;
+ }
+
public IFluentSessionFactoryConfiguration ParsingHqlThrough()
where TQueryTranslator : IQueryTranslatorFactory
{
diff --git a/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs b/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs
index 1b12d014d02..6f14bdc6bb0 100644
--- a/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs
+++ b/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs
@@ -25,6 +25,8 @@ public interface IFluentSessionFactoryConfiguration
IFluentSessionFactoryConfiguration GenerateStatistics();
IFluentSessionFactoryConfiguration Using(EntityMode entityMode);
+ IFluentSessionFactoryConfiguration DefaultFlushMode(FlushMode flushMode);
+
IFluentSessionFactoryConfiguration ParsingHqlThrough() where TQueryTranslator : IQueryTranslatorFactory;
IProxyConfiguration Proxy { get; }
diff --git a/src/NHibernate/Cfg/Settings.cs b/src/NHibernate/Cfg/Settings.cs
index 4ada5f7abc8..089ec96c7e5 100644
--- a/src/NHibernate/Cfg/Settings.cs
+++ b/src/NHibernate/Cfg/Settings.cs
@@ -105,7 +105,9 @@ public Settings()
public bool IsOrderUpdatesEnabled { get; internal set; }
- public bool IsOrderInsertsEnabled { get; internal set; }
+ public bool IsOrderInsertsEnabled { get; internal set; }
+
+ public FlushMode DefaultFlushMode { get; internal set; }
public EntityMode DefaultEntityMode { get; internal set; }
diff --git a/src/NHibernate/Cfg/SettingsFactory.cs b/src/NHibernate/Cfg/SettingsFactory.cs
index b58ecc1b127..bd86265a1ad 100644
--- a/src/NHibernate/Cfg/SettingsFactory.cs
+++ b/src/NHibernate/Cfg/SettingsFactory.cs
@@ -256,6 +256,11 @@ public Settings BuildSettings(IDictionary properties)
}
}
+ //NH-3619
+ FlushMode defaultFlushMode = (FlushMode) Enum.Parse(typeof(FlushMode), PropertiesHelper.GetString(Environment.DefaultFlushMode, properties, FlushMode.Unspecified.ToString()), false);
+ log.Info("Default flush mode: " + defaultFlushMode);
+ settings.DefaultFlushMode = defaultFlushMode;
+
EntityMode defaultEntityMode =
EntityModeHelper.Parse(PropertiesHelper.GetString(Environment.DefaultEntityMode, properties, "poco"));
log.Info("Default entity-mode: " + defaultEntityMode);
diff --git a/src/NHibernate/Impl/SessionFactoryImpl.cs b/src/NHibernate/Impl/SessionFactoryImpl.cs
index 75bd9502169..eb68bf4acda 100644
--- a/src/NHibernate/Impl/SessionFactoryImpl.cs
+++ b/src/NHibernate/Impl/SessionFactoryImpl.cs
@@ -497,7 +497,7 @@ public ISession OpenSession(IDbConnection connection, bool flushBeforeCompletion
return
new SessionImpl(connection, this, true, settings.CacheProvider.NextTimestamp(), interceptor,
settings.DefaultEntityMode, flushBeforeCompletionEnabled, autoCloseSessionEnabled,
- isInterceptorsBeforeTransactionCompletionIgnoreExceptionsEnabled, connectionReleaseMode);
+ isInterceptorsBeforeTransactionCompletionIgnoreExceptionsEnabled, connectionReleaseMode, settings.DefaultFlushMode);
}
public IEntityPersister GetEntityPersister(string entityName)
@@ -1215,7 +1215,8 @@ private SessionImpl OpenSession(IDbConnection connection, bool autoClose, long t
SessionImpl session = new SessionImpl(connection, this, autoClose, timestamp, sessionLocalInterceptor ?? interceptor,
settings.DefaultEntityMode, settings.IsFlushBeforeCompletionEnabled,
settings.IsAutoCloseSessionEnabled, isInterceptorsBeforeTransactionCompletionIgnoreExceptionsEnabled,
- settings.ConnectionReleaseMode);
+ settings.ConnectionReleaseMode, settings.DefaultFlushMode);
+
if (sessionLocalInterceptor != null)
{
// NH specific feature
diff --git a/src/NHibernate/Impl/SessionImpl.cs b/src/NHibernate/Impl/SessionImpl.cs
index ad7c93c1a16..42cd9782f7c 100644
--- a/src/NHibernate/Impl/SessionImpl.cs
+++ b/src/NHibernate/Impl/SessionImpl.cs
@@ -215,7 +215,8 @@ internal SessionImpl(
bool flushBeforeCompletionEnabled,
bool autoCloseSessionEnabled,
bool ignoreExceptionBeforeTransactionCompletion,
- ConnectionReleaseMode connectionReleaseMode)
+ ConnectionReleaseMode connectionReleaseMode,
+ FlushMode defaultFlushMode)
: base(factory)
{
using (new SessionIdLoggingContext(SessionId))
@@ -235,6 +236,7 @@ internal SessionImpl(
this.connectionReleaseMode = connectionReleaseMode;
this.ignoreExceptionBeforeTransactionCompletion = ignoreExceptionBeforeTransactionCompletion;
connectionManager = new ConnectionManager(this, connection, connectionReleaseMode, interceptor);
+ this.flushMode = defaultFlushMode;
if (factory.Statistics.IsStatisticsEnabled)
{
diff --git a/src/NHibernate/nhibernate-configuration.xsd b/src/NHibernate/nhibernate-configuration.xsd
index a7972ca383b..c955001c3a9 100644
--- a/src/NHibernate/nhibernate-configuration.xsd
+++ b/src/NHibernate/nhibernate-configuration.xsd
@@ -110,6 +110,7 @@
+