From 634482849e74d8018d24027c398279e633e9142a Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Tue, 5 Jul 2022 15:14:43 -0700 Subject: [PATCH 1/2] Test capturing SomeConfig --- .../IssueGithub0224_DelayedQueryCapture.cs | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs b/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs index 56ae7c26a1..4c1c3d99f2 100755 --- a/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs +++ b/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs @@ -13,7 +13,6 @@ using Xtensive.Caching; using Xtensive.Orm.Configuration; using Xtensive.Orm.Tests.Issues.IssueGithub0224_DelayedQueryCapture_Model; - namespace Xtensive.Orm.Tests.Issues { namespace IssueGithub0224_DelayedQueryCapture_Model @@ -136,6 +135,79 @@ public void DelayedQueryWithEqualityTest() Assert.AreEqual(0, OtherService3.InstanceCount); } + + public class SomeConfig + { + public int Id { get; set; } + + public bool HideItems { get; set; } + + public static volatile int InstanceCount; + + public SomeConfig() + { + _ = Interlocked.Increment(ref InstanceCount); + } + + ~SomeConfig() + { + _ = Interlocked.Decrement(ref InstanceCount); + } + } + + public class ItemDto + { + public int ItemId { get; set; } + + public ItemDto(SomeConfig config) + { + } + } + + public class Service4 + { + public Session Session; + + private readonly SomeConfig configuration = new SomeConfig() { Id = 1 }; + + public ItemDto DelayedQueryWithDTOCtorParamweter(int id) + { + ItemDto model = null; + { // This curly brace does matter. Without it the Closure is different + var item2 = Session.Query.Single(id); + var query = Session.Query.CreateDelayedQuery( + q => { + return (from inv in q.All().Where(o => o == item2) + select new ItemDto(configuration) { + ItemId = inv.Id + }).Single(); + } + ); + model = query.Value; + } + var invoice2 = Session.Query.All().Single(i => i.Id == model.ItemId); + return model; + } + } + + [Test] + public void DelayedQueryWithDtoCtorParamTest() + { + using (var session = Domain.OpenSession()) + using (var t = session.OpenTransaction()) { + var item = new Item { Tag = 10 }; + DelayedQueryWithDTOCtorParamweter(session); + t.Complete(); + } + TestHelper.CollectGarbage(true); + Assert.AreEqual(0, SomeConfig.InstanceCount); + } + + private void DelayedQueryWithDTOCtorParamweter(Session session) + { + _ = new Service4() { Session = session }.DelayedQueryWithDTOCtorParamweter(1); + } + private void DelayedQueryWithEquality(Session session) { var id = 1; From db96dca1428cb7a9ff509dc4608257b556f9f9c3 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Wed, 6 Jul 2022 01:15:16 -0700 Subject: [PATCH 2/2] Some formatting --- .../Issues/IssueGithub0224_DelayedQueryCapture.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs b/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs index 4c1c3d99f2..72615fad1b 100755 --- a/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs +++ b/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0224_DelayedQueryCapture.cs @@ -13,6 +13,7 @@ using Xtensive.Caching; using Xtensive.Orm.Configuration; using Xtensive.Orm.Tests.Issues.IssueGithub0224_DelayedQueryCapture_Model; + namespace Xtensive.Orm.Tests.Issues { namespace IssueGithub0224_DelayedQueryCapture_Model @@ -140,8 +141,6 @@ public class SomeConfig { public int Id { get; set; } - public bool HideItems { get; set; } - public static volatile int InstanceCount; public SomeConfig()