Skip to content

Commit d4e3a54

Browse files
maca88fredericDelaporte
authored andcommitted
Fix Linq Fetch/FetchMany after SelectMany method
1 parent 0f02335 commit d4e3a54

File tree

3 files changed

+86
-1
lines changed

3 files changed

+86
-1
lines changed

src/NHibernate.Test/Async/Linq/EagerLoadTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,48 @@ public async Task CanSelectAndFetchAsync()
3434
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].Orders));
3535
}
3636

37+
[Test]
38+
public async Task CanSelectAndFetchManyAsync()
39+
{
40+
var result = await (db.OrderLines
41+
.Select(o => o.Product)
42+
.FetchMany(o => o.OrderLines)
43+
.ToListAsync());
44+
45+
session.Close();
46+
47+
Assert.IsNotEmpty(result);
48+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].OrderLines));
49+
}
50+
51+
[Test]
52+
public async Task CanSelectManyAndFetchAsync()
53+
{
54+
var result = await (db.Orders
55+
.SelectMany(o => o.OrderLines)
56+
.Fetch(o => o.Product)
57+
.ToListAsync());
58+
59+
session.Close();
60+
61+
Assert.IsNotEmpty(result);
62+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].Product));
63+
}
64+
65+
[Test]
66+
public async Task CanSelectManyAndFetchManyAsync()
67+
{
68+
var result = await (db.Employees
69+
.SelectMany(o => o.Orders)
70+
.FetchMany(o => o.OrderLines)
71+
.ToListAsync());
72+
73+
session.Close();
74+
75+
Assert.IsNotEmpty(result);
76+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].OrderLines));
77+
}
78+
3779
[Test]
3880
public async Task CanSelectAndFetchHqlAsync()
3981
{

src/NHibernate.Test/Linq/EagerLoadTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,48 @@ public void CanSelectAndFetch()
2323
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].Orders));
2424
}
2525

26+
[Test]
27+
public void CanSelectAndFetchMany()
28+
{
29+
var result = db.OrderLines
30+
.Select(o => o.Product)
31+
.FetchMany(o => o.OrderLines)
32+
.ToList();
33+
34+
session.Close();
35+
36+
Assert.IsNotEmpty(result);
37+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].OrderLines));
38+
}
39+
40+
[Test]
41+
public void CanSelectManyAndFetch()
42+
{
43+
var result = db.Orders
44+
.SelectMany(o => o.OrderLines)
45+
.Fetch(o => o.Product)
46+
.ToList();
47+
48+
session.Close();
49+
50+
Assert.IsNotEmpty(result);
51+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].Product));
52+
}
53+
54+
[Test]
55+
public void CanSelectManyAndFetchMany()
56+
{
57+
var result = db.Employees
58+
.SelectMany(o => o.Orders)
59+
.FetchMany(o => o.OrderLines)
60+
.ToList();
61+
62+
session.Close();
63+
64+
Assert.IsNotEmpty(result);
65+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].OrderLines));
66+
}
67+
2668
[Test]
2769
public void CanSelectAndFetchHql()
2870
{

src/NHibernate/Linq/Visitors/ResultOperatorProcessors/ProcessFetch.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ public void Process(FetchRequestBase resultOperator, QueryModelVisitor queryMode
1313
var querySource = QuerySourceLocator.FindQuerySource(
1414
queryModelVisitor.Model,
1515
resultOperator.RelationMember.DeclaringType);
16+
var name = queryModelVisitor.VisitorParameters.QuerySourceNamer.GetName(querySource);
1617

17-
Process(resultOperator, queryModelVisitor, tree, querySource.ItemName);
18+
Process(resultOperator, queryModelVisitor, tree, name);
1819
}
1920

2021
public void Process(FetchRequestBase resultOperator, QueryModelVisitor queryModelVisitor, IntermediateHqlTree tree, string sourceAlias)

0 commit comments

Comments
 (0)