From edc6c537b0ad2a56427e04465a8163929ea25593 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sun, 13 Aug 2023 13:36:14 +0300 Subject: [PATCH 1/8] Test case --- .../NHSpecificTest/GH3403OneToOne/Entity.cs | 17 +++++++ .../NHSpecificTest/GH3403OneToOne/Fixture.cs | 51 +++++++++++++++++++ .../GH3403OneToOne/Mappings.hbm.xml | 18 +++++++ 3 files changed, 86 insertions(+) create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Entity.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Mappings.hbm.xml diff --git a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Entity.cs b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Entity.cs new file mode 100644 index 00000000000..0bde7420b92 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Entity.cs @@ -0,0 +1,17 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.GH3403OneToOne +{ + public class Entity1 + { + public virtual Guid Id { get; set; } + + public virtual Entity2 Child { get; set; } + } + public class Entity2 + { + public virtual Guid Id { get; set; } + + public virtual Entity1 Parent { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs new file mode 100644 index 00000000000..86a8e7e26b5 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs @@ -0,0 +1,51 @@ +using System; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3403OneToOne +{ + [TestFixture] + public class Fixture : BugTestCase + { + private Guid _id; + + protected override void OnSetUp() + { + using var session = OpenSession(); + using var transaction = session.BeginTransaction(); + var entity = new Entity1 + { + Child = new Entity2() + }; + + entity.Child.Parent = entity; + + session.Save(entity); + transaction.Commit(); + _id = entity.Id; + } + + protected override void OnTearDown() + { + using var session = OpenSession(); + using var transaction = session.BeginTransaction(); + session.CreateQuery("delete from System.Object").ExecuteUpdate(); + + transaction.Commit(); + } + + [Test] + public void OrphanDeleteForDetachedOneToOne() + { + using var session = OpenSession(); + using var transaction = session.BeginTransaction(); + + var entity = session.Get(_id); + session.Evict(entity.Child); + entity.Child = null; + + session.Flush(); + + transaction.Commit(); + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Mappings.hbm.xml new file mode 100644 index 00000000000..175d587c0ce --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Mappings.hbm.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + Parent + + + + + From bb763a66a66a384352df753bb92b0da028ed5a87 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sun, 13 Aug 2023 13:42:08 +0300 Subject: [PATCH 2/8] Fix --- src/NHibernate/Engine/Cascade.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NHibernate/Engine/Cascade.cs b/src/NHibernate/Engine/Cascade.cs index 2c2c2987a3b..35098331337 100644 --- a/src/NHibernate/Engine/Cascade.cs +++ b/src/NHibernate/Engine/Cascade.cs @@ -203,7 +203,7 @@ private void CascadeProperty(object parent, object child, IType type, CascadeSty if (loadedValue != null) { - eventSource.Delete(entry.Persister.EntityName, loadedValue, false, null); + eventSource.Delete(((EntityType) type).GetAssociatedEntityName(), loadedValue, false, null); } } } From 45254710ba148d7be1efea52dc148c0b657e5d05 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 13 Aug 2023 10:45:43 +0000 Subject: [PATCH 3/8] Generate async files --- .../NHSpecificTest/GH3403OneToOne/Fixture.cs | 62 +++++++++++++++++++ src/NHibernate/Async/Engine/Cascade.cs | 2 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs new file mode 100644 index 00000000000..f4ae0272678 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using System; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH3403OneToOne +{ + using System.Threading.Tasks; + [TestFixture] + public class FixtureAsync : BugTestCase + { + private Guid _id; + + protected override void OnSetUp() + { + using var session = OpenSession(); + using var transaction = session.BeginTransaction(); + var entity = new Entity1 + { + Child = new Entity2() + }; + + entity.Child.Parent = entity; + + session.Save(entity); + transaction.Commit(); + _id = entity.Id; + } + + protected override void OnTearDown() + { + using var session = OpenSession(); + using var transaction = session.BeginTransaction(); + session.CreateQuery("delete from System.Object").ExecuteUpdate(); + + transaction.Commit(); + } + + [Test] + public async Task OrphanDeleteForDetachedOneToOneAsync() + { + using var session = OpenSession(); + using var transaction = session.BeginTransaction(); + + var entity = await (session.GetAsync(_id)); + await (session.EvictAsync(entity.Child)); + entity.Child = null; + + await (session.FlushAsync()); + + await (transaction.CommitAsync()); + } + } +} diff --git a/src/NHibernate/Async/Engine/Cascade.cs b/src/NHibernate/Async/Engine/Cascade.cs index c0165e5cf66..46877a36ae1 100644 --- a/src/NHibernate/Async/Engine/Cascade.cs +++ b/src/NHibernate/Async/Engine/Cascade.cs @@ -151,7 +151,7 @@ private async Task CascadePropertyAsync(object parent, object child, IType type, if (loadedValue != null) { - await (eventSource.DeleteAsync(entry.Persister.EntityName, loadedValue, false, null, cancellationToken)).ConfigureAwait(false); + await (eventSource.DeleteAsync(((EntityType) type).GetAssociatedEntityName(), loadedValue, false, null, cancellationToken)).ConfigureAwait(false); } } } From 153bd7cb166d0c5313a756ba1e4e67ee249a6863 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sun, 13 Aug 2023 18:05:35 +0300 Subject: [PATCH 4/8] Update src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Frédéric Delaporte <12201973+fredericDelaporte@users.noreply.github.com> --- .../NHSpecificTest/GH3403OneToOne/Fixture.cs | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs index 86a8e7e26b5..4d3349b09e3 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs @@ -36,16 +36,28 @@ protected override void OnTearDown() [Test] public void OrphanDeleteForDetachedOneToOne() { - using var session = OpenSession(); - using var transaction = session.BeginTransaction(); + Guid childId; + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + var entity = session.Get(_id); + childId = entity.Child.Id + session.Evict(entity.Child); + entity.Child = null; - var entity = session.Get(_id); - session.Evict(entity.Child); - entity.Child = null; + session.Flush(); + transaction.Commit(); + } - session.Flush(); + using (var session = OpenSession()) + { + var entity = session.Get(_id); + Assert.That(entity, Is.Not.Null); + Assert.That(entity.Child, Is.Null, "Unexpected child on parent"); - transaction.Commit(); + var child = session.Get(_id); + Assert.That(child , Is.Null, "Child is still in database"); + } } } } From 3d3adaf55a81028d7d2f6e05123563f361871995 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sun, 13 Aug 2023 18:07:26 +0300 Subject: [PATCH 5/8] Update Fixture.cs --- src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs index 4d3349b09e3..943909757f9 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs @@ -55,7 +55,7 @@ public void OrphanDeleteForDetachedOneToOne() Assert.That(entity, Is.Not.Null); Assert.That(entity.Child, Is.Null, "Unexpected child on parent"); - var child = session.Get(_id); + var child = session.Get(_id); Assert.That(child , Is.Null, "Child is still in database"); } } From cd7c81c318a237877dc11a64ec2d408892aa005c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 13 Aug 2023 15:11:16 +0000 Subject: [PATCH 6/8] Generate async files --- .../NHSpecificTest/GH3403OneToOne/Fixture.cs | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs index f4ae0272678..75828a7fc77 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs @@ -47,16 +47,28 @@ protected override void OnTearDown() [Test] public async Task OrphanDeleteForDetachedOneToOneAsync() { - using var session = OpenSession(); - using var transaction = session.BeginTransaction(); + Guid childId; + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + var entity = await (session.GetAsync(_id)); + childId = entity.Child.Id + await (session.EvictAsync(entity.Child)); + entity.Child = null; - var entity = await (session.GetAsync(_id)); - await (session.EvictAsync(entity.Child)); - entity.Child = null; + await (session.FlushAsync()); + await (transaction.CommitAsync()); + } - await (session.FlushAsync()); + using (var session = OpenSession()) + { + var entity = await (session.GetAsync(_id)); + Assert.That(entity, Is.Not.Null); + Assert.That(entity.Child, Is.Null, "Unexpected child on parent"); - await (transaction.CommitAsync()); + var child = await (session.GetAsync(_id)); + Assert.That(child , Is.Null, "Child is still in database"); + } } } } From ac57f3ab2fed0672bd87258c64326e78f9af5e35 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sun, 13 Aug 2023 20:20:46 +0300 Subject: [PATCH 7/8] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Frédéric Delaporte <12201973+fredericDelaporte@users.noreply.github.com> --- src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs index 943909757f9..08f965eef1d 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH3403OneToOne/Fixture.cs @@ -41,7 +41,7 @@ public void OrphanDeleteForDetachedOneToOne() using (var transaction = session.BeginTransaction()) { var entity = session.Get(_id); - childId = entity.Child.Id + childId = entity.Child.Id; session.Evict(entity.Child); entity.Child = null; @@ -55,7 +55,7 @@ public void OrphanDeleteForDetachedOneToOne() Assert.That(entity, Is.Not.Null); Assert.That(entity.Child, Is.Null, "Unexpected child on parent"); - var child = session.Get(_id); + var child = session.Get(childId); Assert.That(child , Is.Null, "Child is still in database"); } } From 4850c9c82c9aa63e7b488030395a65841decf9ec Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 13 Aug 2023 17:23:30 +0000 Subject: [PATCH 8/8] Generate async files --- .../Async/NHSpecificTest/GH3403OneToOne/Fixture.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs index 75828a7fc77..85c119e905c 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3403OneToOne/Fixture.cs @@ -52,7 +52,7 @@ public async Task OrphanDeleteForDetachedOneToOneAsync() using (var transaction = session.BeginTransaction()) { var entity = await (session.GetAsync(_id)); - childId = entity.Child.Id + childId = entity.Child.Id; await (session.EvictAsync(entity.Child)); entity.Child = null; @@ -66,7 +66,7 @@ public async Task OrphanDeleteForDetachedOneToOneAsync() Assert.That(entity, Is.Not.Null); Assert.That(entity.Child, Is.Null, "Unexpected child on parent"); - var child = await (session.GetAsync(_id)); + var child = await (session.GetAsync(childId)); Assert.That(child , Is.Null, "Child is still in database"); } }