From 000849ada0614a2e243100135ab4dae9d6c698ce Mon Sep 17 00:00:00 2001 From: shoban Date: Sun, 18 Mar 2018 15:49:11 +0000 Subject: [PATCH 1/7] Fix for Stateless Session 1:1 loading. Signed-off-by: shoban --- .editorconfig | 2 +- .../NHSpecificTest/GH1149/Classes.cs | 28 ++++++++++ .../NHSpecificTest/GH1149/Fixture.cs | 55 +++++++++++++++++++ .../NHSpecificTest/GH1149/Mappings.hbm.xml | 25 +++++++++ src/NHibernate.sln.DotSettings | 10 +++- src/NHibernate/Impl/StatelessSessionImpl.cs | 15 ++++- 6 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml diff --git a/.editorconfig b/.editorconfig index 2094727efb8..31cae038393 100644 --- a/.editorconfig +++ b/.editorconfig @@ -17,7 +17,7 @@ indent_style = space indent_size = 2 [*.xml] -indent_style = space +indent_style = tab indent_size = 2 [*.csproj] diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs b/src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs new file mode 100644 index 00000000000..65c9ead04ba --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs @@ -0,0 +1,28 @@ +namespace NHibernate.Test.NHSpecificTest.GH1149 +{ + public class Company + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + public virtual Address Address { get; set; } + } + + public class Address + { + public Address() + { + } + + public Address(Company company) + { + this.Company = company; + } + + public virtual int Id { get; set; } + + public virtual Company Company { get; set; } + + public virtual string AddressLine1 { get; set; } + + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs new file mode 100644 index 00000000000..0900b7383d5 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs @@ -0,0 +1,55 @@ +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH1149 +{ + [TestFixture] + public class Fixture : BugTestCase + { + private int _companyId = 0; + + protected override void OnSetUp() + { + base.OnSetUp(); + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + var company = new Company { Name = "Test Company" }; + + company.Address = new Address(company) { AddressLine1 = "Company Address" }; + + _companyId = (int) session.Save(company); + + tx.Commit(); + } + } + } + + protected override void OnTearDown() + { + using (ISession session = OpenSession()) + using (ITransaction transaction = session.BeginTransaction()) + { + session.Delete("from Address"); + session.Delete("from Company"); + session.Flush(); + transaction.Commit(); + } + } + + [Test] + public void StatelessSessionLoadsOneToOneRelatedObject() + { + using (var stateless = Sfi.OpenStatelessSession()) + { + var loadedCompany = stateless.Get(_companyId); + + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); + } + } + + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml new file mode 100644 index 00000000000..18ed2e57997 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/NHibernate.sln.DotSettings b/src/NHibernate.sln.DotSettings index a38b0a203a1..ec2a3ce2054 100644 --- a/src/NHibernate.sln.DotSettings +++ b/src/NHibernate.sln.DotSettings @@ -1,5 +1,5 @@  - USE_SPACES + True True True @@ -7,7 +7,10 @@ True True True + NEVER + NEVER False + NEVER False True True @@ -20,9 +23,14 @@ <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> True + True + True + True True + True True True + True True True NUnit Assert.NotNull diff --git a/src/NHibernate/Impl/StatelessSessionImpl.cs b/src/NHibernate/Impl/StatelessSessionImpl.cs index 1775af7f0c4..a9773e63ca0 100644 --- a/src/NHibernate/Impl/StatelessSessionImpl.cs +++ b/src/NHibernate/Impl/StatelessSessionImpl.cs @@ -228,7 +228,20 @@ public override void AfterTransactionCompletion(bool successful, ITransaction tx public override object GetContextEntityIdentifier(object obj) { - return null; + using (BeginProcess()) + { + if (obj.IsProxy()) + { + INHibernateProxy proxy = obj as INHibernateProxy; + + return proxy.HibernateLazyInitializer.Identifier; + } + else + { + EntityEntry entry = temporaryPersistenceContext.GetEntry(obj); + return (entry != null) ? entry.Id : null; + } + } } public override object Instantiate(string clazz, object id) From 8535c1467c31c2296ee67a2700843cace51b3e07 Mon Sep 17 00:00:00 2001 From: shoban Date: Sun, 18 Mar 2018 17:09:20 +0000 Subject: [PATCH 2/7] Remove .editorconfig and sln.DotSettings --- .editorconfig | 2 +- src/NHibernate.sln.DotSettings | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.editorconfig b/.editorconfig index 31cae038393..2094727efb8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -17,7 +17,7 @@ indent_style = space indent_size = 2 [*.xml] -indent_style = tab +indent_style = space indent_size = 2 [*.csproj] diff --git a/src/NHibernate.sln.DotSettings b/src/NHibernate.sln.DotSettings index ec2a3ce2054..a38b0a203a1 100644 --- a/src/NHibernate.sln.DotSettings +++ b/src/NHibernate.sln.DotSettings @@ -1,5 +1,5 @@  - + USE_SPACES True True True @@ -7,10 +7,7 @@ True True True - NEVER - NEVER False - NEVER False True True @@ -23,14 +20,9 @@ <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> True - True - True - True True - True True True - True True True NUnit Assert.NotNull From 7e3d1689c5bea9da83725a507cc16900d619f442 Mon Sep 17 00:00:00 2001 From: shoban Date: Mon, 19 Mar 2018 09:52:45 +0000 Subject: [PATCH 3/7] Added One To One with foreign key test --- .../NHSpecificTest/GH1149/Classes.cs | 23 +++++++ .../NHSpecificTest/GH1149/Fixture.cs | 64 ++++++++++++++----- .../NHSpecificTest/GH1149/Mappings.hbm.xml | 21 ++++++ 3 files changed, 92 insertions(+), 16 deletions(-) diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs b/src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs index 65c9ead04ba..2b131b23c61 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Classes.cs @@ -25,4 +25,27 @@ public Address(Company company) public virtual string AddressLine1 { get; set; } } + + public class CompanyO2O + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + public virtual AddressO2O Address { get; set; } + } + + public class AddressO2O + { + public virtual int Id { get; set; } + + public virtual CompanyO2O Company { get; set; } + + public virtual string AddressLine1 { get; set; } + + public virtual void SetCompany(CompanyO2O company) + { + Company = company; + company.Address = this; + } + + } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs index 0900b7383d5..152f182438c 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs @@ -5,11 +5,26 @@ namespace NHibernate.Test.NHSpecificTest.GH1149 [TestFixture] public class Fixture : BugTestCase { - private int _companyId = 0; + protected override void OnTearDown() + { + using (ISession session = OpenSession()) + using (ITransaction transaction = session.BeginTransaction()) + { + session.Delete("from Address"); + session.Delete("from Company"); + session.Delete("from AddressO2O"); + session.Delete("from CompanyO2O"); + session.Flush(); + transaction.Commit(); + } + } - protected override void OnSetUp() + [Test] + public void StatelessSessionLoadsOneToOneRelatedObject_PropertyRef() { - base.OnSetUp(); + // Create and save company and address + var companyId = 0; + using (ISession session = OpenSession()) { using (ITransaction tx = session.BeginTransaction()) @@ -18,31 +33,49 @@ protected override void OnSetUp() company.Address = new Address(company) { AddressLine1 = "Company Address" }; - _companyId = (int) session.Save(company); + companyId = (int) session.Save(company); tx.Commit(); } } - } - protected override void OnTearDown() - { - using (ISession session = OpenSession()) - using (ITransaction transaction = session.BeginTransaction()) + using (var stateless = Sfi.OpenStatelessSession()) { - session.Delete("from Address"); - session.Delete("from Company"); - session.Flush(); - transaction.Commit(); + var loadedCompany = stateless.Get(companyId); + + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); } } [Test] - public void StatelessSessionLoadsOneToOneRelatedObject() + public void StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef() { + var companyId = 0; + + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + var company = new CompanyO2O { Name = "Test Company" }; + var address = new AddressO2O {AddressLine1 = "Company Address"}; + + address.SetCompany(company); + + // Have to save the address to get the company to be saved as well + // Saving company doesn't save the address. + companyId = (int) session.Save(address); + + tx.Commit(); + } + } + + using (var stateless = Sfi.OpenStatelessSession()) { - var loadedCompany = stateless.Get(_companyId); + var loadedCompany = stateless.Get(companyId); Assert.That(loadedCompany, Is.Not.Null); Assert.That(loadedCompany.Name, Is.Not.Null); @@ -50,6 +83,5 @@ public void StatelessSessionLoadsOneToOneRelatedObject() Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); } } - } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml index 18ed2e57997..450c71d524b 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Mappings.hbm.xml @@ -19,7 +19,28 @@ + + + + + + + + + + + + + + + + Company + + + + + From 7d2fc4b39ab274fbb770b112ea6a372ad057ae37 Mon Sep 17 00:00:00 2001 From: shoban Date: Mon, 19 Mar 2018 21:45:37 +0000 Subject: [PATCH 4/7] Remove obj.IsProxy check on foot of comment on PR. --- src/NHibernate/Impl/StatelessSessionImpl.cs | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/NHibernate/Impl/StatelessSessionImpl.cs b/src/NHibernate/Impl/StatelessSessionImpl.cs index a9773e63ca0..d09e17aede4 100644 --- a/src/NHibernate/Impl/StatelessSessionImpl.cs +++ b/src/NHibernate/Impl/StatelessSessionImpl.cs @@ -230,17 +230,8 @@ public override object GetContextEntityIdentifier(object obj) { using (BeginProcess()) { - if (obj.IsProxy()) - { - INHibernateProxy proxy = obj as INHibernateProxy; - - return proxy.HibernateLazyInitializer.Identifier; - } - else - { - EntityEntry entry = temporaryPersistenceContext.GetEntry(obj); - return (entry != null) ? entry.Id : null; - } + EntityEntry entry = temporaryPersistenceContext.GetEntry(obj); + return (entry != null) ? entry.Id : null; } } From 7d787bd871b965cd7f13c9a9a1ac01ff09f89b78 Mon Sep 17 00:00:00 2001 From: shoban Date: Tue, 20 Mar 2018 08:26:38 +0000 Subject: [PATCH 5/7] Added Async tests. --- .../NHSpecificTest/GH1149/Fixture.cs | 91 ++++++++++++++----- 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs index 152f182438c..d482598298d 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs @@ -1,3 +1,4 @@ +using System.Threading.Tasks; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.GH1149 @@ -23,25 +24,44 @@ protected override void OnTearDown() public void StatelessSessionLoadsOneToOneRelatedObject_PropertyRef() { // Create and save company and address - var companyId = 0; + var companyId = SaveCompanyAndAddress(); - using (ISession session = OpenSession()) + using (var stateless = Sfi.OpenStatelessSession()) { - using (ITransaction tx = session.BeginTransaction()) - { - var company = new Company { Name = "Test Company" }; + var loadedCompany = stateless.Get(companyId); - company.Address = new Address(company) { AddressLine1 = "Company Address" }; + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); + } + } - companyId = (int) session.Save(company); + [Test] + public void StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef() + { + var companyId = SaveCompanyAndAddressO2O(); - tx.Commit(); - } + using (var stateless = Sfi.OpenStatelessSession()) + { + var loadedCompany = stateless.Get(companyId); + + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); } + } + + [Test] + public async Task StatelessSessionLoadsOneToOneRelatedObject_WithProperyRef_Async() + { + // Create and save company and address + var companyId = SaveCompanyAndAddress(); using (var stateless = Sfi.OpenStatelessSession()) { - var loadedCompany = stateless.Get(companyId); + var loadedCompany = await stateless.GetAsync(companyId); Assert.That(loadedCompany, Is.Not.Null); Assert.That(loadedCompany.Name, Is.Not.Null); @@ -51,10 +71,46 @@ public void StatelessSessionLoadsOneToOneRelatedObject_PropertyRef() } [Test] - public void StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef() + public async Task StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef_Async() + { + var companyId = SaveCompanyAndAddressO2O(); + + using (var stateless = Sfi.OpenStatelessSession()) + { + var loadedCompany = await stateless.GetAsync(companyId); + + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); + } + } + + private int SaveCompanyAndAddress() { var companyId = 0; + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + var company = new Company { Name = "Test Company" }; + + company.Address = new Address(company) { AddressLine1 = "Company Address" }; + + companyId = (int) session.Save(company); + + tx.Commit(); + } + + return companyId; + } + } + + private int SaveCompanyAndAddressO2O() + { + var addressId = 0; + using (ISession session = OpenSession()) { using (ITransaction tx = session.BeginTransaction()) @@ -66,22 +122,13 @@ public void StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef() // Have to save the address to get the company to be saved as well // Saving company doesn't save the address. - companyId = (int) session.Save(address); + addressId = (int) session.Save(address); tx.Commit(); } } - - using (var stateless = Sfi.OpenStatelessSession()) - { - var loadedCompany = stateless.Get(companyId); - - Assert.That(loadedCompany, Is.Not.Null); - Assert.That(loadedCompany.Name, Is.Not.Null); - Assert.That(loadedCompany.Address, Is.Not.Null); - Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); - } + return addressId; } } } From d610e1b2dfc9d698e3306d86adebf17dddb0390b Mon Sep 17 00:00:00 2001 From: shoban Date: Tue, 20 Mar 2018 09:27:45 +0000 Subject: [PATCH 6/7] Revert changes. --- .../NHSpecificTest/GH1149/Fixture.cs | 91 +++++-------------- 1 file changed, 22 insertions(+), 69 deletions(-) diff --git a/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs index d482598298d..152f182438c 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1149/Fixture.cs @@ -1,4 +1,3 @@ -using System.Threading.Tasks; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.GH1149 @@ -24,44 +23,25 @@ protected override void OnTearDown() public void StatelessSessionLoadsOneToOneRelatedObject_PropertyRef() { // Create and save company and address - var companyId = SaveCompanyAndAddress(); + var companyId = 0; - using (var stateless = Sfi.OpenStatelessSession()) + using (ISession session = OpenSession()) { - var loadedCompany = stateless.Get(companyId); - - Assert.That(loadedCompany, Is.Not.Null); - Assert.That(loadedCompany.Name, Is.Not.Null); - Assert.That(loadedCompany.Address, Is.Not.Null); - Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); - } - } + using (ITransaction tx = session.BeginTransaction()) + { + var company = new Company { Name = "Test Company" }; - [Test] - public void StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef() - { - var companyId = SaveCompanyAndAddressO2O(); + company.Address = new Address(company) { AddressLine1 = "Company Address" }; - using (var stateless = Sfi.OpenStatelessSession()) - { - var loadedCompany = stateless.Get(companyId); + companyId = (int) session.Save(company); - Assert.That(loadedCompany, Is.Not.Null); - Assert.That(loadedCompany.Name, Is.Not.Null); - Assert.That(loadedCompany.Address, Is.Not.Null); - Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); + tx.Commit(); + } } - } - - [Test] - public async Task StatelessSessionLoadsOneToOneRelatedObject_WithProperyRef_Async() - { - // Create and save company and address - var companyId = SaveCompanyAndAddress(); using (var stateless = Sfi.OpenStatelessSession()) { - var loadedCompany = await stateless.GetAsync(companyId); + var loadedCompany = stateless.Get(companyId); Assert.That(loadedCompany, Is.Not.Null); Assert.That(loadedCompany.Name, Is.Not.Null); @@ -71,46 +51,10 @@ public async Task StatelessSessionLoadsOneToOneRelatedObject_WithProperyRef_Asyn } [Test] - public async Task StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef_Async() - { - var companyId = SaveCompanyAndAddressO2O(); - - using (var stateless = Sfi.OpenStatelessSession()) - { - var loadedCompany = await stateless.GetAsync(companyId); - - Assert.That(loadedCompany, Is.Not.Null); - Assert.That(loadedCompany.Name, Is.Not.Null); - Assert.That(loadedCompany.Address, Is.Not.Null); - Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); - } - } - - private int SaveCompanyAndAddress() + public void StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRef() { var companyId = 0; - using (ISession session = OpenSession()) - { - using (ITransaction tx = session.BeginTransaction()) - { - var company = new Company { Name = "Test Company" }; - - company.Address = new Address(company) { AddressLine1 = "Company Address" }; - - companyId = (int) session.Save(company); - - tx.Commit(); - } - - return companyId; - } - } - - private int SaveCompanyAndAddressO2O() - { - var addressId = 0; - using (ISession session = OpenSession()) { using (ITransaction tx = session.BeginTransaction()) @@ -122,13 +66,22 @@ private int SaveCompanyAndAddressO2O() // Have to save the address to get the company to be saved as well // Saving company doesn't save the address. - addressId = (int) session.Save(address); + companyId = (int) session.Save(address); tx.Commit(); } } - return addressId; + + using (var stateless = Sfi.OpenStatelessSession()) + { + var loadedCompany = stateless.Get(companyId); + + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); + } } } } From 7791ea23b4f4dc9097661ae77168b49b1a5e2b77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?= Date: Tue, 20 Mar 2018 11:12:44 +0100 Subject: [PATCH 7/7] Regen async. --- .../Async/NHSpecificTest/GH1149/Fixture.cs | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/NHibernate.Test/Async/NHSpecificTest/GH1149/Fixture.cs diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH1149/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH1149/Fixture.cs new file mode 100644 index 00000000000..efa2cc99cd4 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH1149/Fixture.cs @@ -0,0 +1,98 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.GH1149 +{ + using System.Threading.Tasks; + [TestFixture] + public class FixtureAsync : BugTestCase + { + protected override void OnTearDown() + { + using (ISession session = OpenSession()) + using (ITransaction transaction = session.BeginTransaction()) + { + session.Delete("from Address"); + session.Delete("from Company"); + session.Delete("from AddressO2O"); + session.Delete("from CompanyO2O"); + session.Flush(); + transaction.Commit(); + } + } + + [Test] + public async Task StatelessSessionLoadsOneToOneRelatedObject_PropertyRefAsync() + { + // Create and save company and address + var companyId = 0; + + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + var company = new Company { Name = "Test Company" }; + + company.Address = new Address(company) { AddressLine1 = "Company Address" }; + + companyId = (int) await (session.SaveAsync(company)); + + await (tx.CommitAsync()); + } + } + + using (var stateless = Sfi.OpenStatelessSession()) + { + var loadedCompany = await (stateless.GetAsync(companyId)); + + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); + } + } + + [Test] + public async Task StatelessSessionLoadsOneToOneRelatedObject_WithoutPropertyRefAsync() + { + var companyId = 0; + + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + var company = new CompanyO2O { Name = "Test Company" }; + var address = new AddressO2O {AddressLine1 = "Company Address"}; + + address.SetCompany(company); + + // Have to save the address to get the company to be saved as well + // Saving company doesn't save the address. + companyId = (int) await (session.SaveAsync(address)); + + await (tx.CommitAsync()); + } + } + + + using (var stateless = Sfi.OpenStatelessSession()) + { + var loadedCompany = await (stateless.GetAsync(companyId)); + + Assert.That(loadedCompany, Is.Not.Null); + Assert.That(loadedCompany.Name, Is.Not.Null); + Assert.That(loadedCompany.Address, Is.Not.Null); + Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null); + } + } + } +}