Skip to content

Commit 60c5213

Browse files
Fix constant value in function cached in LINQ query
* Fixes #1330 (NH-3673) * Allows a workaround for #1363 (NH-2500)
1 parent bb91488 commit 60c5213

File tree

3 files changed

+27
-18
lines changed

3 files changed

+27
-18
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,16 @@ public int GetItemValue(Product p)
175175
{
176176
return _value;
177177
}
178+
179+
// Workaround for object instance caching. Without this, ObjectConstants test fails.
180+
public override string ToString()
181+
{
182+
return base.ToString() + _value;
183+
}
178184
}
179185

180186
// Adapted from NH-2500 first test case by Andrey Titov (file NHTest3.zip)
181187
[Test]
182-
[Ignore("Not fixed yet")]
183188
public async Task ObjectConstantsAsync()
184189
{
185190
var builder = new InfoBuilder(1);
@@ -200,7 +205,6 @@ private int TestFunc(Product item, int closureValue)
200205

201206
// Adapted from NH-3673
202207
[Test]
203-
[Ignore("Not fixed yet")]
204208
public async Task ConstantsInFuncCallAsync()
205209
{
206210
var closureVariable = 1;

src/NHibernate.Test/Linq/ConstantTest.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,16 @@ public int GetItemValue(Product p)
163163
{
164164
return _value;
165165
}
166+
167+
// Workaround for object instance caching. Without this, ObjectConstants test fails.
168+
public override string ToString()
169+
{
170+
return base.ToString() + _value;
171+
}
166172
}
167173

168174
// Adapted from NH-2500 first test case by Andrey Titov (file NHTest3.zip)
169175
[Test]
170-
[Ignore("Not fixed yet")]
171176
public void ObjectConstants()
172177
{
173178
var builder = new InfoBuilder(1);
@@ -188,7 +193,6 @@ private int TestFunc(Product item, int closureValue)
188193

189194
// Adapted from NH-3673
190195
[Test]
191-
[Ignore("Not fixed yet")]
192196
public void ConstantsInFuncCall()
193197
{
194198
var closureVariable = 1;

src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -163,20 +163,21 @@ protected override Expression VisitMethodCall(MethodCallExpression expression)
163163
{
164164
var old = insideSelectClause;
165165

166-
switch (expression.Method.Name)
167-
{
168-
case "First":
169-
case "FirstOrDefault":
170-
case "Single":
171-
case "SingleOrDefault":
172-
case "Select":
173-
case "GroupBy":
174-
insideSelectClause = true;
175-
break;
176-
default:
177-
insideSelectClause = false;
178-
break;
179-
}
166+
if (expression.Method.DeclaringType?.Namespace == "System.Linq")
167+
switch (expression.Method.Name)
168+
{
169+
case "First":
170+
case "FirstOrDefault":
171+
case "Single":
172+
case "SingleOrDefault":
173+
case "Select":
174+
case "GroupBy":
175+
insideSelectClause = true;
176+
break;
177+
default:
178+
insideSelectClause = false;
179+
break;
180+
}
180181

181182
Visit(expression.Object);
182183
_string.Append('.');

0 commit comments

Comments
 (0)