diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1040/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1040/Fixture.cs new file mode 100644 index 00000000000..be515057de6 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1040/Fixture.cs @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// +// 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.Linq; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1040 +{ + using System.Threading.Tasks; + [TestFixture] + public class SubclassPropertyRefFixtureAsync : BugTestCase + { + protected override void OnSetUp() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + var child = new Child(); + session.Save(child); + + var consumer = new Consumer(); + session.Save(consumer); + child.UK = consumer.Id; + consumer.Child = child; + + transaction.Commit(); + } + } + + protected override void OnTearDown() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + session.Delete("from System.Object"); + + transaction.Commit(); + } + } + + [Test] + public async Task CanLazyLoadAsync() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await ((from e in session.Query() + select e).FirstAsync()); + + Assert.That(result.Child, Is.Not.Null); + Assert.DoesNotThrowAsync(() => NHibernateUtil.InitializeAsync(result.Child)); + } + } + + [Test] + public async Task CanLinqFetchAsync() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await ((from e in session.Query().Fetch(x => x.Child) + select e).FirstAsync()); + + Assert.That(result.Child, Is.Not.Null); + Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True); + } + } + + [Test] + public async Task CanQueryOverFetchAsync() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await ((from e in session.Query().Fetch(x => x.Child) + select e).FirstAsync()); + + Assert.That(result.Child, Is.Not.Null); + Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH1040/Entity.cs b/src/NHibernate.Test/NHSpecificTest/NH1040/Entity.cs new file mode 100644 index 00000000000..649c408b336 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH1040/Entity.cs @@ -0,0 +1,19 @@ +namespace NHibernate.Test.NHSpecificTest.NH1040 +{ + class Parent + { + public virtual int Id { get; set; } + public virtual int UK { get; set; } + } + + class Child : Parent + { + public virtual string Name { get; set; } + } + + class Consumer + { + public virtual int Id { get; set; } + public virtual Child Child { get; set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH1040/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1040/Fixture.cs new file mode 100644 index 00000000000..8a320a139a8 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH1040/Fixture.cs @@ -0,0 +1,80 @@ +using System.Linq; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1040 +{ + [TestFixture] + public class SubclassPropertyRefFixture : BugTestCase + { + protected override void OnSetUp() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + var child = new Child(); + session.Save(child); + + var consumer = new Consumer(); + session.Save(consumer); + child.UK = consumer.Id; + consumer.Child = child; + + transaction.Commit(); + } + } + + protected override void OnTearDown() + { + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + session.Delete("from System.Object"); + + transaction.Commit(); + } + } + + [Test] + public void CanLazyLoad() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var result = (from e in session.Query() + select e).First(); + + Assert.That(result.Child, Is.Not.Null); + Assert.DoesNotThrow(() => NHibernateUtil.Initialize(result.Child)); + } + } + + [Test] + public void CanLinqFetch() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var result = (from e in session.Query().Fetch(x => x.Child) + select e).First(); + + Assert.That(result.Child, Is.Not.Null); + Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True); + } + } + + [Test] + public void CanQueryOverFetch() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var result = (from e in session.Query().Fetch(x => x.Child) + select e).First(); + + Assert.That(result.Child, Is.Not.Null); + Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH1040/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/NH1040/Mappings.hbm.xml new file mode 100644 index 00000000000..c64e5b451fb --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH1040/Mappings.hbm.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/NHibernate/Mapping/JoinedSubclass.cs b/src/NHibernate/Mapping/JoinedSubclass.cs index f7177d10e0d..efde2ee7fb8 100644 --- a/src/NHibernate/Mapping/JoinedSubclass.cs +++ b/src/NHibernate/Mapping/JoinedSubclass.cs @@ -41,10 +41,5 @@ public override void Validate(IMapping mapping) throw new MappingException(string.Format("subclass key has wrong number of columns: {0} type: {1}", MappedClass.Name, Key.Type.Name)); } } - - public override IEnumerable ReferenceablePropertyIterator - { - get { return PropertyIterator; } - } } }