diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH1413/FixtureByCode.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH1413/FixtureByCode.cs index d9e228b4c95..712cc7a54d9 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH1413/FixtureByCode.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH1413/FixtureByCode.cs @@ -9,6 +9,7 @@ using NHibernate.Cfg.MappingSchema; +using NHibernate.Engine; using NHibernate.Mapping.ByCode; using NUnit.Framework; @@ -26,7 +27,7 @@ protected override HbmMapping GetMappings() var mapper = new ModelMapper(); mapper.Class(rc => { - rc.Id(x => x.Id, m => m.Generator(Generators.Native)); + rc.Id(x => x.Id, m => m.Generator(Generators.Identity)); rc.Property(x => x.Name); rc.Bag(x => x.Children, m => { @@ -38,7 +39,7 @@ protected override HbmMapping GetMappings() mapper.Class(rc => { - rc.Id(x => x.Id, m => m.Generator(Generators.Native)); + rc.Id(x => x.Id, m => m.Generator(Generators.Identity)); rc.Property(x => x.Name); }); @@ -74,13 +75,12 @@ protected override void OnTearDown() } } - [Test] - [KnownBug("#1413")] - public async Task SessionIsDirtyShouldNotTriggerCascadeSavingAsync() + [Theory] + public async Task SessionIsDirtyShouldNotTriggerCascadeSavingAsync(bool beginTransaction) { Sfi.Statistics.IsStatisticsEnabled = true; using (var session = OpenSession()) - using (session.BeginTransaction()) + using (beginTransaction ? session.BeginTransaction() : null) { var parent = await (GetParentAsync(session)); var entityChild = new EntityChild @@ -95,11 +95,14 @@ public async Task SessionIsDirtyShouldNotTriggerCascadeSavingAsync() var isDirty = await (session.IsDirtyAsync()); Assert.That(Sfi.Statistics.EntityInsertCount, Is.EqualTo(0), "Dirty has triggered an insert"); - Assert.That( - entityChild.Id, - Is.EqualTo(0), - "Transient objects should not be saved by ISession.IsDirty() call (expected 0 as Id)"); Assert.That(isDirty, "ISession.IsDirty() call should return true."); + if (Dialect.SupportsIdentityColumns) + { + Assert.That( + entityChild.Id, + Is.EqualTo(0), + "Transient objects should not be saved by ISession.IsDirty() call (expected 0 as Id)"); + } } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH1413/FixtureByCode.cs b/src/NHibernate.Test/NHSpecificTest/GH1413/FixtureByCode.cs index 9668a232da9..c487a7ebbb9 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1413/FixtureByCode.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1413/FixtureByCode.cs @@ -1,4 +1,5 @@ using NHibernate.Cfg.MappingSchema; +using NHibernate.Engine; using NHibernate.Mapping.ByCode; using NUnit.Framework; @@ -14,7 +15,7 @@ protected override HbmMapping GetMappings() var mapper = new ModelMapper(); mapper.Class(rc => { - rc.Id(x => x.Id, m => m.Generator(Generators.Native)); + rc.Id(x => x.Id, m => m.Generator(Generators.Identity)); rc.Property(x => x.Name); rc.Bag(x => x.Children, m => { @@ -26,7 +27,7 @@ protected override HbmMapping GetMappings() mapper.Class(rc => { - rc.Id(x => x.Id, m => m.Generator(Generators.Native)); + rc.Id(x => x.Id, m => m.Generator(Generators.Identity)); rc.Property(x => x.Name); }); @@ -62,13 +63,12 @@ protected override void OnTearDown() } } - [Test] - [KnownBug("#1413")] - public void SessionIsDirtyShouldNotTriggerCascadeSaving() + [Theory] + public void SessionIsDirtyShouldNotTriggerCascadeSaving(bool beginTransaction) { Sfi.Statistics.IsStatisticsEnabled = true; using (var session = OpenSession()) - using (session.BeginTransaction()) + using (beginTransaction ? session.BeginTransaction() : null) { var parent = GetParent(session); var entityChild = new EntityChild @@ -83,11 +83,14 @@ public void SessionIsDirtyShouldNotTriggerCascadeSaving() var isDirty = session.IsDirty(); Assert.That(Sfi.Statistics.EntityInsertCount, Is.EqualTo(0), "Dirty has triggered an insert"); - Assert.That( - entityChild.Id, - Is.EqualTo(0), - "Transient objects should not be saved by ISession.IsDirty() call (expected 0 as Id)"); Assert.That(isDirty, "ISession.IsDirty() call should return true."); + if (Dialect.SupportsIdentityColumns) + { + Assert.That( + entityChild.Id, + Is.EqualTo(0), + "Transient objects should not be saved by ISession.IsDirty() call (expected 0 as Id)"); + } } } diff --git a/src/NHibernate/Async/Event/Default/DefaultDirtyCheckEventListener.cs b/src/NHibernate/Async/Event/Default/DefaultDirtyCheckEventListener.cs index f4b47a26a9c..a161d50366a 100644 --- a/src/NHibernate/Async/Event/Default/DefaultDirtyCheckEventListener.cs +++ b/src/NHibernate/Async/Event/Default/DefaultDirtyCheckEventListener.cs @@ -9,6 +9,8 @@ using System; +using NHibernate.Engine; +using NHibernate.Util; namespace NHibernate.Event.Default { diff --git a/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs b/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs index e8692a1f0bd..9c346dbb0e2 100644 --- a/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs +++ b/src/NHibernate/Event/Default/DefaultDirtyCheckEventListener.cs @@ -1,4 +1,6 @@ using System; +using NHibernate.Engine; +using NHibernate.Util; namespace NHibernate.Event.Default { @@ -11,6 +13,10 @@ public partial class DefaultDirtyCheckEventListener : AbstractFlushingEventListe { private static readonly INHibernateLogger log = NHibernateLogger.For(typeof(DefaultDirtyCheckEventListener)); + protected override object Anything => IdentityMap.Instantiate(10); + + protected override CascadingAction CascadingAction => CascadingAction.Persist; + public virtual void OnDirtyCheck(DirtyCheckEvent @event) { int oldSize = @event.Session.ActionQueue.CollectionRemovalsCount;