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; }
- }
}
}