Skip to content

Commit e53ca69

Browse files
author
zzzprojects
committed
Fix QueryFutre + QueryCache + QueryFilter
Fix QueryFutre + QueryCache + QueryFilter
1 parent c0a9fa6 commit e53ca69

File tree

13 files changed

+67
-45
lines changed

13 files changed

+67
-45
lines changed

src/Z.EntityFramework.Plus.EF6.NET40/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@
1818
[assembly: AssemblyCulture("")]
1919
[assembly: ComVisible(false)]
2020
[assembly: Guid("ac398eb8-0a31-4d06-a804-84d10b6da96d")]
21-
[assembly: AssemblyVersion("1.4.14")]
22-
[assembly: AssemblyFileVersion("1.4.14")]
21+
[assembly: AssemblyVersion("1.4.16")]
22+
[assembly: AssemblyFileVersion("1.4.16")]

src/Z.EntityFramework.Plus.EF6.NET40/QueryCache/Extensions/IQueryable`/FromCacheAsync.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,23 @@ public static Task<IEnumerable<T>> FromCacheAsync<T>(this IQueryable<T> query, C
5858
return result;
5959
}
6060

61+
//public static async Task<IEnumerable<T>> FromCacheAsync2<T>(this IQueryable<T> query, CacheItemPolicy policy, params string[] tags) where T : class
62+
//{
63+
// var key = QueryCacheManager.GetCacheKey(query, tags);
64+
65+
// var item = QueryCacheManager.Cache.Get(key);
66+
67+
// if (item == null)
68+
// {
69+
// item = await query.AsNoTracking().ToListAsync().ConfigureAwait(false);
70+
// item = QueryCacheManager.Cache.AddOrGetExisting(key, item, policy) ?? item;
71+
// QueryCacheManager.AddCacheTag(key, tags);
72+
// }
73+
74+
// var result = (IEnumerable<T>)item;
75+
// return result;
76+
//}
77+
6178
/// <summary>
6279
/// Return the result of the <paramref name="query" /> from the cache. If the query is not cached
6380
/// yet, the query is materialized asynchronously and cached before being returned.

src/Z.EntityFramework.Plus.EF6.NET40/QueryFilter/Extensions/IDbSet.Filter.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,12 @@ public static IQueryable<T> Filter<T>(this DbSet<T> query, params object[] keys)
3636
#endif
3737
{
3838
var queryFilterQueryable = QueryFilterManager.GetFilterQueryable(query);
39+
var nonQueryFilter = queryFilterQueryable != null ? (IQueryable<T>)queryFilterQueryable.OriginalQuery : query;
40+
3941
var context = queryFilterQueryable != null ? queryFilterQueryable.Context : query.GetDbContext();
4042
var filterContext = QueryFilterManager.AddOrGetFilterContext(context);
41-
return filterContext.ApplyFilter(query, keys);
43+
44+
return filterContext.ApplyFilter(nonQueryFilter, keys);
4245
}
4346
}
4447
}

src/Z.EntityFramework.Plus.EF6.NET40/_Internal/LinqExpressionExtensions/LambdaExpression/LambdaExpression.GetPropertyOrFieldAccessor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// More projects: http://www.zzzprojects.com/
66
// Copyright © ZZZ Projects Inc. 2014 - 2016. All rights reserved.
77

8-
#if FULL || AUDIT || QUERY_INCLUDEOPTIMIZED
8+
#if FULL || AUDIT || QUERY_INCLUDEFILTER || QUERY_INCLUDEOPTIMIZED
99

1010
using System;
1111
using System.Linq;

src/Z.EntityFramework.Plus.EF6.NET40/_Internal/LinqExpressionExtensions/LambdaExpression/LambdaExpression.GetPropertyOrFieldAccessors.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// More projects: http://www.zzzprojects.com/
66
// Copyright © ZZZ Projects Inc. 2014 - 2016. All rights reserved.
77

8-
#if FULL || AUDIT || QUERY_INCLUDEOPTIMIZED
8+
#if FULL || AUDIT || QUERY_INCLUDEFILTER || QUERY_INCLUDEOPTIMIZED
99
using System.Linq;
1010
using System.Linq.Expressions;
1111

src/Z.EntityFramework.Plus.EF6.NET40/_Internal/LinqExpressionExtensions/PropertyOrFieldAccessor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// More projects: http://www.zzzprojects.com/
66
// Copyright © ZZZ Projects Inc. 2014 - 2016. All rights reserved.
77

8-
#if FULL || AUDIT || QUERY_INCLUDEOPTIMIZED
8+
#if FULL || AUDIT || QUERY_INCLUDEFILTER || QUERY_INCLUDEOPTIMIZED
99

1010
using System.Collections.ObjectModel;
1111
using System.Linq;

src/Z.EntityFramework.Plus.EF6.NET40/_Internal/LinqExpressionExtensions/_Internal/ExpressionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// More projects: http://www.zzzprojects.com/
66
// Copyright © ZZZ Projects Inc. 2014 - 2016. All rights reserved.
77

8-
#if FULL || AUDIT || QUERY_INCLUDEOPTIMIZED
8+
#if FULL || AUDIT || QUERY_INCLUDEFILTER || QUERY_INCLUDEOPTIMIZED
99
using System;
1010
using System.Collections.Generic;
1111
using System.Linq.Expressions;

src/Z.EntityFramework.Plus.EF6/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@
1818
[assembly: AssemblyCulture("")]
1919
[assembly: ComVisible(false)]
2020
[assembly: Guid("89f47e22-ff83-4ac8-be90-c6755748cf89")]
21-
[assembly: AssemblyVersion("1.4.14")]
22-
[assembly: AssemblyFileVersion("1.4.14")]
21+
[assembly: AssemblyVersion("1.4.16")]
22+
[assembly: AssemblyFileVersion("1.4.16")]

src/Z.EntityFramework.Plus.EF6/QueryCache/Extensions/IQueryable`/FromCacheAsync.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,23 @@ public static Task<IEnumerable<T>> FromCacheAsync<T>(this IQueryable<T> query, C
5858
return result;
5959
}
6060

61+
//public static async Task<IEnumerable<T>> FromCacheAsync2<T>(this IQueryable<T> query, CacheItemPolicy policy, params string[] tags) where T : class
62+
//{
63+
// var key = QueryCacheManager.GetCacheKey(query, tags);
64+
65+
// var item = QueryCacheManager.Cache.Get(key);
66+
67+
// if (item == null)
68+
// {
69+
// item = await query.AsNoTracking().ToListAsync().ConfigureAwait(false);
70+
// item = QueryCacheManager.Cache.AddOrGetExisting(key, item, policy) ?? item;
71+
// QueryCacheManager.AddCacheTag(key, tags);
72+
// }
73+
74+
// var result = (IEnumerable<T>)item;
75+
// return result;
76+
//}
77+
6178
/// <summary>
6279
/// Return the result of the <paramref name="query" /> from the cache. If the query is not cached
6380
/// yet, the query is materialized asynchronously and cached before being returned.

src/Z.EntityFramework.Plus.EF6/QueryFuture/QueryFutureBatch.cs

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -158,45 +158,30 @@ protected DbCommand CreateCommandCombined()
158158
sql = sql.Replace("@" + oldValue, "@" + newValue);
159159
}
160160
#elif EF6
161+
var commandTextAndParameter = query.Query.GetCommandTextAndParameters();
161162

162-
var objectQuery = query.Query;
163-
var stateField = objectQuery.GetType().BaseType.GetField("_state", BindingFlags.NonPublic | BindingFlags.Instance);
164-
var state = stateField.GetValue(objectQuery);
165-
var getExecutionPlanMethod = state.GetType().GetMethod("GetExecutionPlan", BindingFlags.NonPublic | BindingFlags.Instance);
166-
var getExecutionPlan = getExecutionPlanMethod.Invoke(state, new object[] { null });
167-
var prepareEntityCommandMethod = getExecutionPlan.GetType().GetMethod("PrepareEntityCommand", BindingFlags.NonPublic | BindingFlags.Instance);
168163

169-
string sql = "";
170-
using (EntityCommand entityCommand = (EntityCommand) prepareEntityCommandMethod.Invoke(getExecutionPlan, new object[] {objectQuery.Context, objectQuery.Parameters}))
171-
{
172-
var getCommandDefinitionMethod = entityCommand.GetType().GetMethod("GetCommandDefinition", BindingFlags.NonPublic | BindingFlags.Instance);
173-
var getCommandDefinition = getCommandDefinitionMethod.Invoke(entityCommand, new object[0]);
174-
175-
var prepareEntityCommandBeforeExecutionMethod = getCommandDefinition.GetType().GetMethod("PrepareEntityCommandBeforeExecution", BindingFlags.NonPublic | BindingFlags.Instance);
176-
var prepareEntityCommandBeforeExecution = (DbCommand)prepareEntityCommandBeforeExecutionMethod.Invoke(getCommandDefinition, new object[] {entityCommand});
177-
178-
sql = prepareEntityCommandBeforeExecution.CommandText;
179-
var parameters = prepareEntityCommandBeforeExecution.Parameters;
164+
var sql = commandTextAndParameter.Item1;
165+
var parameters = commandTextAndParameter.Item2;
180166

181-
// UPDATE parameter name
182-
foreach (DbParameter parameter in parameters)
167+
// UPDATE parameter name
168+
foreach (DbParameter parameter in parameters)
169+
{
170+
var oldValue = parameter.ParameterName;
171+
if (oldValue.StartsWith("@"))
183172
{
184-
var oldValue = parameter.ParameterName;
185-
if (oldValue.StartsWith("@"))
186-
{
187-
oldValue = oldValue.Substring(1);
188-
}
189-
var newValue = string.Concat("Z_", queryCount, "_", oldValue);
173+
oldValue = oldValue.Substring(1);
174+
}
175+
var newValue = string.Concat("Z_", queryCount, "_", oldValue);
190176

191-
// CREATE parameter
192-
var dbParameter = command.CreateParameter();
193-
dbParameter.ParameterName = newValue;
194-
dbParameter.Value = parameter.Value;
195-
command.Parameters.Add(dbParameter);
177+
// CREATE parameter
178+
var dbParameter = command.CreateParameter();
179+
dbParameter.ParameterName = newValue;
180+
dbParameter.Value = parameter.Value;
181+
command.Parameters.Add(dbParameter);
196182

197-
// REPLACE parameter with new value
198-
sql = sql.Replace("@" + oldValue, "@" + newValue);
199-
}
183+
// REPLACE parameter with new value
184+
sql = sql.Replace("@" + oldValue, "@" + newValue);
200185
}
201186
#elif EFCORE
202187

0 commit comments

Comments
 (0)