Skip to content

Commit 410e631

Browse files
authored
Fix property-ref on joined subclass (#2679)
Fixes #715
1 parent 9dd77ca commit 410e631

File tree

5 files changed

+214
-5
lines changed

5 files changed

+214
-5
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by AsyncGenerator.
4+
//
5+
// Changes to this file may cause incorrect behavior and will be lost if
6+
// the code is regenerated.
7+
// </auto-generated>
8+
//------------------------------------------------------------------------------
9+
10+
11+
using System.Linq;
12+
using NHibernate.Linq;
13+
using NUnit.Framework;
14+
15+
namespace NHibernate.Test.NHSpecificTest.NH1040
16+
{
17+
using System.Threading.Tasks;
18+
[TestFixture]
19+
public class SubclassPropertyRefFixtureAsync : BugTestCase
20+
{
21+
protected override void OnSetUp()
22+
{
23+
using (var session = OpenSession())
24+
using (var transaction = session.BeginTransaction())
25+
{
26+
var child = new Child();
27+
session.Save(child);
28+
29+
var consumer = new Consumer();
30+
session.Save(consumer);
31+
child.UK = consumer.Id;
32+
consumer.Child = child;
33+
34+
transaction.Commit();
35+
}
36+
}
37+
38+
protected override void OnTearDown()
39+
{
40+
using (var session = OpenSession())
41+
using (var transaction = session.BeginTransaction())
42+
{
43+
session.Delete("from System.Object");
44+
45+
transaction.Commit();
46+
}
47+
}
48+
49+
[Test]
50+
public async Task CanLazyLoadAsync()
51+
{
52+
using (var session = OpenSession())
53+
using (session.BeginTransaction())
54+
{
55+
var result = await ((from e in session.Query<Consumer>()
56+
select e).FirstAsync());
57+
58+
Assert.That(result.Child, Is.Not.Null);
59+
Assert.DoesNotThrowAsync(() => NHibernateUtil.InitializeAsync(result.Child));
60+
}
61+
}
62+
63+
[Test]
64+
public async Task CanLinqFetchAsync()
65+
{
66+
using (var session = OpenSession())
67+
using (session.BeginTransaction())
68+
{
69+
var result = await ((from e in session.Query<Consumer>().Fetch(x => x.Child)
70+
select e).FirstAsync());
71+
72+
Assert.That(result.Child, Is.Not.Null);
73+
Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True);
74+
}
75+
}
76+
77+
[Test]
78+
public async Task CanQueryOverFetchAsync()
79+
{
80+
using (var session = OpenSession())
81+
using (session.BeginTransaction())
82+
{
83+
var result = await ((from e in session.Query<Consumer>().Fetch(x => x.Child)
84+
select e).FirstAsync());
85+
86+
Assert.That(result.Child, Is.Not.Null);
87+
Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True);
88+
}
89+
}
90+
}
91+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace NHibernate.Test.NHSpecificTest.NH1040
2+
{
3+
class Parent
4+
{
5+
public virtual int Id { get; set; }
6+
public virtual int UK { get; set; }
7+
}
8+
9+
class Child : Parent
10+
{
11+
public virtual string Name { get; set; }
12+
}
13+
14+
class Consumer
15+
{
16+
public virtual int Id { get; set; }
17+
public virtual Child Child { get; set; }
18+
}
19+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using System.Linq;
2+
using NHibernate.Linq;
3+
using NUnit.Framework;
4+
5+
namespace NHibernate.Test.NHSpecificTest.NH1040
6+
{
7+
[TestFixture]
8+
public class SubclassPropertyRefFixture : BugTestCase
9+
{
10+
protected override void OnSetUp()
11+
{
12+
using (var session = OpenSession())
13+
using (var transaction = session.BeginTransaction())
14+
{
15+
var child = new Child();
16+
session.Save(child);
17+
18+
var consumer = new Consumer();
19+
session.Save(consumer);
20+
child.UK = consumer.Id;
21+
consumer.Child = child;
22+
23+
transaction.Commit();
24+
}
25+
}
26+
27+
protected override void OnTearDown()
28+
{
29+
using (var session = OpenSession())
30+
using (var transaction = session.BeginTransaction())
31+
{
32+
session.Delete("from System.Object");
33+
34+
transaction.Commit();
35+
}
36+
}
37+
38+
[Test]
39+
public void CanLazyLoad()
40+
{
41+
using (var session = OpenSession())
42+
using (session.BeginTransaction())
43+
{
44+
var result = (from e in session.Query<Consumer>()
45+
select e).First();
46+
47+
Assert.That(result.Child, Is.Not.Null);
48+
Assert.DoesNotThrow(() => NHibernateUtil.Initialize(result.Child));
49+
}
50+
}
51+
52+
[Test]
53+
public void CanLinqFetch()
54+
{
55+
using (var session = OpenSession())
56+
using (session.BeginTransaction())
57+
{
58+
var result = (from e in session.Query<Consumer>().Fetch(x => x.Child)
59+
select e).First();
60+
61+
Assert.That(result.Child, Is.Not.Null);
62+
Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True);
63+
}
64+
}
65+
66+
[Test]
67+
public void CanQueryOverFetch()
68+
{
69+
using (var session = OpenSession())
70+
using (session.BeginTransaction())
71+
{
72+
var result = (from e in session.Query<Consumer>().Fetch(x => x.Child)
73+
select e).First();
74+
75+
Assert.That(result.Child, Is.Not.Null);
76+
Assert.That(NHibernateUtil.IsInitialized(result.Child), Is.True);
77+
}
78+
}
79+
}
80+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
3+
assembly="NHibernate.Test"
4+
namespace="NHibernate.Test.NHSpecificTest.NH1040">
5+
6+
<class name="Parent">
7+
<id name ="Id">
8+
<generator class="native" />
9+
</id>
10+
<property name="UK" />
11+
12+
<joined-subclass name="Child">
13+
<key column="Id"/>
14+
<property name="Name" />
15+
</joined-subclass>
16+
</class>
17+
18+
<class name="Consumer">
19+
<id name ="Id">
20+
<generator class="native" />
21+
</id>
22+
<many-to-one name="Child" property-ref="UK" foreign-key="none" />
23+
</class>
24+
</hibernate-mapping>

src/NHibernate/Mapping/JoinedSubclass.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,5 @@ public override void Validate(IMapping mapping)
4141
throw new MappingException(string.Format("subclass key has wrong number of columns: {0} type: {1}", MappedClass.Name, Key.Type.Name));
4242
}
4343
}
44-
45-
public override IEnumerable<Property> ReferenceablePropertyIterator
46-
{
47-
get { return PropertyIterator; }
48-
}
4944
}
5045
}

0 commit comments

Comments
 (0)