Skip to content

Commit 1a05aa8

Browse files
rjpereshazzik
authored andcommitted
NH-3075 - Allow to use fetch with select
1 parent 874989e commit 1a05aa8

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/NHibernate.Test/Linq/EagerLoadTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,33 @@ namespace NHibernate.Test.Linq
88
[TestFixture]
99
public class EagerLoadTests : LinqTestCase
1010
{
11+
[Test]
12+
public void CanSelectAndFetch()
13+
{
14+
//NH-3075
15+
var result = db.Orders
16+
.Select(o => o.Customer)
17+
.Fetch(c => c.Orders)
18+
.ToList();
19+
20+
session.Close();
21+
22+
Assert.IsNotEmpty(result);
23+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].Orders));
24+
}
25+
26+
[Test]
27+
public void CanSelectAndFetchHql()
28+
{
29+
//NH-3075
30+
var result = this.session.CreateQuery("select c from Order o left join o.Customer c left join fetch c.Orders").List<Customer>();
31+
32+
session.Close();
33+
34+
Assert.IsNotEmpty(result);
35+
Assert.IsTrue(NHibernateUtil.IsInitialized(result[0].Orders));
36+
}
37+
1138
[Test]
1239
public void RelationshipsAreLazyLoadedByDefault()
1340
{

src/NHibernate/Linq/Visitors/QuerySourceLocator.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Remotion.Linq;
22
using Remotion.Linq.Clauses;
3+
using Remotion.Linq.Collections;
34

45
namespace NHibernate.Linq.Visitors
56
{
@@ -22,6 +23,20 @@ public static IQuerySource FindQuerySource(QueryModel queryModel, System.Type ty
2223
return finder._querySource;
2324
}
2425

26+
public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index)
27+
{
28+
if (_type.IsAssignableFrom(fromClause.ItemType))
29+
{
30+
if (_querySource == null)
31+
{
32+
_querySource = fromClause;
33+
return;
34+
}
35+
}
36+
37+
base.VisitAdditionalFromClause(fromClause, queryModel, index);
38+
}
39+
2540
public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel)
2641
{
2742
if (_type.IsAssignableFrom(fromClause.ItemType))

0 commit comments

Comments
 (0)