Skip to content

Commit a7aa875

Browse files
author
zzzprojects
committed
Update source to 1.4.26
Update source to 1.4.26
1 parent 95ebf63 commit a7aa875

File tree

114 files changed

+2859
-176
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+2859
-176
lines changed

src/Z.EntityFramework.Plus.EF5.NET40/BatchUpdate/BatchUpdate.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -436,11 +436,13 @@ public DbCommand CreateCommand(IQueryable query, IEntityType entity, List<Tuple<
436436

437437
#if EFCORE
438438
// ADD Parameter
439-
foreach (var parameter in queryContext.ParameterValues)
439+
foreach (var relationalParameter in relationalCommand.Parameters)
440440
{
441+
var parameter = queryContext.ParameterValues[relationalParameter.InvariantName];
442+
441443
var param = command.CreateParameter();
442-
param.ParameterName = parameter.Key;
443-
param.Value = parameter.Value;
444+
param.ParameterName = relationalParameter.InvariantName;
445+
param.Value = parameter;
444446

445447
command.Parameters.Add(param);
446448
}
@@ -617,6 +619,7 @@ public List<Tuple<string, object>> GetInnerValues<T>(IQueryable<T> query, Expres
617619

618620
// Add the destination name
619621
valueSql = valueSql.Replace("[x]", "B");
622+
valueSql = valueSql.Replace("[c]", "B");
620623
#endif
621624
destinationValues.Add(new Tuple<string, object>(columnName, Expression.Constant(valueSql)));
622625
}
@@ -692,6 +695,20 @@ public Dictionary<string, object> ResolveUpdateFromQueryDictValues<T>(Expression
692695
}
693696
else
694697
{
698+
// FIX all member access to remove variable
699+
memberExpression = memberExpression.Visit((MemberExpression m) =>
700+
{
701+
if (m.Expression.NodeType == ExpressionType.Constant)
702+
{
703+
var lambda = Expression.Lambda(m, null);
704+
var value = lambda.Compile().DynamicInvoke();
705+
var c = Expression.Constant(value);
706+
return c;
707+
}
708+
709+
return m;
710+
});
711+
695712
// ADD expression, the expression will be resolved later
696713
dictValues.Add(propertyName, memberExpression);
697714
}

src/Z.EntityFramework.Plus.EF5.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("e4c2af73-caeb-4429-bcb6-0a359484e064")]
21-
[assembly: AssemblyVersion("1.4.19")]
22-
[assembly: AssemblyFileVersion("1.4.19")]
21+
[assembly: AssemblyVersion("1.4.26")]
22+
[assembly: AssemblyFileVersion("1.4.26")]
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Description: Entity Framework Bulk Operations & Utilities (EF Bulk SaveChanges, Insert, Update, Delete, Merge | LINQ Query Cache, Deferred, Filter, IncludeFilter, IncludeOptimize | Audit)
2+
// Website & Documentation: https://github.com/zzzprojects/Entity-Framework-Plus
3+
// Forum & Issues: https://github.com/zzzprojects/EntityFramework-Plus/issues
4+
// License: https://github.com/zzzprojects/EntityFramework-Plus/blob/master/LICENSE
5+
// More projects: http://www.zzzprojects.com/
6+
// Copyright © ZZZ Projects Inc. 2014 - 2016. All rights reserved.
7+
8+
9+
#if EFCORE
10+
using System;
11+
using System.Linq;
12+
#if EF5 || EF6
13+
using System.Data.Entity;
14+
15+
#elif EFCORE
16+
using Microsoft.EntityFrameworkCore;
17+
18+
#endif
19+
20+
namespace Z.EntityFramework.Plus
21+
{
22+
public static partial class QueryFilterExtensions
23+
{
24+
public static IQueryable<T> SetFiltered<T>(this DbContext context) where T : class
25+
{
26+
var filterContext = QueryFilterManager.AddOrGetFilterContext(context);
27+
28+
if (filterContext.FilterSetByType.ContainsKey(typeof(T)))
29+
{
30+
var set = filterContext.FilterSetByType[typeof(T)];
31+
32+
if (set.Count == 1)
33+
{
34+
return (IQueryable<T>) set[0].DbSetProperty.GetValue(context);
35+
}
36+
throw new Exception(ExceptionMessage.QueryFilter_SetFilteredManyFound);
37+
}
38+
39+
throw new Exception(ExceptionMessage.QueryFilter_SetFilteredNotFound);
40+
}
41+
}
42+
}
43+
44+
#endif

src/Z.EntityFramework.Plus.EF5.NET40/QueryFilter/QueryFilterContext.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,25 @@ public BaseQueryFilter AddFilter<T>(object key, Func<IQueryable<T>, IQueryable<T
7878
return queryFilter;
7979
}
8080

81+
/// <summary>Filter the query using context filters associated with specified keys.</summary>
82+
/// <typeparam name="T">Generic type parameter.</typeparam>
83+
/// <param name="query">The query to filter using context filters associated with specified keys.</param>
84+
/// <returns>The query filtered using context filters associated with specified keys.</returns>
85+
public IQueryable<T> ApplyFilter<T>(IQueryable<T> query)
86+
{
87+
object newQuery = query;
88+
89+
foreach (var filter in Filters)
90+
{
91+
if (filter.Value.IsDefaultEnabled)
92+
{
93+
newQuery = (IQueryable) filter.Value.ApplyFilter<T>(newQuery);
94+
}
95+
}
96+
97+
return (IQueryable<T>) newQuery;
98+
}
99+
81100
/// <summary>Filter the query using context filters associated with specified keys.</summary>
82101
/// <typeparam name="T">The type of elements of the query.</typeparam>
83102
/// <param name="query">The query to filter using context filters associated with specified keys.</param>

src/Z.EntityFramework.Plus.EF5.NET40/QueryFuture/BaseQueryFuture.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ public abstract class BaseQueryFuture
6969
/// <value>The query connection.</value>
7070
internal CreateEntityRelationConnection QueryConnection { get; set; }
7171

72+
public virtual void ExecuteInMemory()
73+
{
74+
75+
}
76+
7277
/// <summary>Creates executor and get command.</summary>
7378
/// <returns>The new executor and get command.</returns>
7479
public virtual IRelationalCommand CreateExecutorAndGetCommand(out RelationalQueryContext queryContext)
@@ -204,9 +209,9 @@ public IEnumerator<T> GetQueryEnumerator<T>(DbDataReader reader)
204209
var createMethod = resultShaperFactory.GetType().GetMethod("Create", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
205210

206211
#if EF5
207-
var create = createMethod.Invoke(resultShaperFactory, new object[] {reader, Query.Context, Query.Context.MetadataWorkspace, MergeOption.AppendOnly, false});
212+
var create = createMethod.Invoke(resultShaperFactory, new object[] {reader, Query.Context, Query.Context.MetadataWorkspace, Query.MergeOption, false});
208213
#elif EF6
209-
var create = createMethod.Invoke(resultShaperFactory, new object[] { reader, Query.Context, Query.Context.MetadataWorkspace, MergeOption.AppendOnly, false, true });
214+
var create = createMethod.Invoke(resultShaperFactory, new object[] { reader, Query.Context, Query.Context.MetadataWorkspace, Query.MergeOption, false, true });
210215
#endif
211216

212217
// REFLECTION: Query.QueryState.GetExecutionPlan(null).ResultShaperFactory.Create(parameters).GetEnumerator()
@@ -222,5 +227,10 @@ public IEnumerator<T> GetQueryEnumerator<T>(DbDataReader reader)
222227
return queryEnumerable.GetEnumerator();
223228
#endif
224229
}
230+
231+
public virtual void GetResultDirectly()
232+
{
233+
234+
}
225235
}
226236
}

src/Z.EntityFramework.Plus.EF5.NET40/QueryFuture/Extensions/IQueryable`/Future.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,21 @@ public static QueryFutureEnumerable<T> Future<T>(this IQueryable<T> query)
3434
var futureBatch = QueryFutureManager.AddOrGetBatch(objectQuery.Context);
3535
var futureQuery = new QueryFutureEnumerable<T>(futureBatch, objectQuery);
3636
#elif EFCORE
37-
var context = query.GetDbContext();
38-
var futureBatch = QueryFutureManager.AddOrGetBatch(context);
39-
var futureQuery = new QueryFutureEnumerable<T>(futureBatch, query);
37+
QueryFutureBatch futureBatch;
38+
QueryFutureEnumerable<T> futureQuery;
39+
if (query.IsInMemoryQueryContext())
40+
{
41+
var context = query.GetInMemoryContext();
42+
futureBatch = QueryFutureManager.AddOrGetBatch(context);
43+
futureBatch.IsInMemory = true;
44+
futureQuery = new QueryFutureEnumerable<T>(futureBatch, query);
45+
}
46+
else
47+
{
48+
var context = query.GetDbContext();
49+
futureBatch = QueryFutureManager.AddOrGetBatch(context);
50+
futureQuery = new QueryFutureEnumerable<T>(futureBatch, query);
51+
}
4052
#endif
4153
futureBatch.Queries.Add(futureQuery);
4254

src/Z.EntityFramework.Plus.EF5.NET40/QueryFuture/Extensions/IQueryable`/FutureValue.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,21 @@ public static QueryFutureValue<TResult> FutureValue<TResult>(this IQueryable<TRe
3434
var futureBatch = QueryFutureManager.AddOrGetBatch(objectQuery.Context);
3535
var futureQuery = new QueryFutureValue<TResult>(futureBatch, objectQuery);
3636
#elif EFCORE
37-
var context = query.GetDbContext();
38-
var futureBatch = QueryFutureManager.AddOrGetBatch(context);
39-
var futureQuery = new QueryFutureValue<TResult>(futureBatch, query);
37+
QueryFutureBatch futureBatch;
38+
QueryFutureValue<TResult> futureQuery;
39+
if (query.IsInMemoryQueryContext())
40+
{
41+
var context = query.GetInMemoryContext();
42+
futureBatch = QueryFutureManager.AddOrGetBatch(context);
43+
futureBatch.IsInMemory = true;
44+
futureQuery = new QueryFutureValue<TResult>(futureBatch, query);
45+
}
46+
else
47+
{
48+
var context = query.GetDbContext();
49+
futureBatch = QueryFutureManager.AddOrGetBatch(context);
50+
futureQuery = new QueryFutureValue<TResult>(futureBatch, query);
51+
}
4052
#endif
4153
futureBatch.Queries.Add(futureQuery);
4254

src/Z.EntityFramework.Plus.EF5.NET40/QueryFuture/Extensions/QueryDeferred/FutureValue.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,22 @@ public static QueryFutureValue<TResult> FutureValue<TResult>(this QueryDeferred<
2626
var futureBatch = QueryFutureManager.AddOrGetBatch(objectQuery.Context);
2727
var futureQuery = new QueryFutureValue<TResult>(futureBatch, objectQuery);
2828
#elif EFCORE
29-
var context = query.Query.GetDbContext();
30-
var futureBatch = QueryFutureManager.AddOrGetBatch(context);
31-
var futureQuery = new QueryFutureValue<TResult>(futureBatch, query.Query);
29+
QueryFutureBatch futureBatch;
30+
QueryFutureValue<TResult> futureQuery;
31+
if (query.Query.IsInMemoryQueryContext())
32+
{
33+
var context = query.Query.GetInMemoryContext();
34+
futureBatch = QueryFutureManager.AddOrGetBatch(context);
35+
futureBatch.IsInMemory = true;
36+
futureQuery = new QueryFutureValue<TResult>(futureBatch, query.Query);
37+
futureQuery.InMemoryDeferredQuery = query;
38+
}
39+
else
40+
{
41+
var context = query.Query.GetDbContext();
42+
futureBatch = QueryFutureManager.AddOrGetBatch(context);
43+
futureQuery = new QueryFutureValue<TResult>(futureBatch, query.Query);
44+
}
3245
#endif
3346
futureBatch.Queries.Add(futureQuery);
3447

src/Z.EntityFramework.Plus.EF5.NET40/QueryFuture/QueryFutureBatch.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public QueryFutureBatch(DbContext context)
5656
public ObjectContext Context { get; set; }
5757
#elif EFCORE
5858
public DbContext Context { get; set; }
59+
60+
public bool IsInMemory { get; set; }
5961
#endif
6062

6163
/// <summary>Gets or sets deferred query lists waiting to be executed.</summary>
@@ -65,9 +67,31 @@ public QueryFutureBatch(DbContext context)
6567
/// <summary>Executes deferred query lists.</summary>
6668
public void ExecuteQueries()
6769
{
70+
if (Queries.Count == 0)
71+
{
72+
// Already all executed
73+
return;
74+
}
75+
76+
if (Queries.Count == 1)
77+
{
78+
Queries[0].GetResultDirectly();
79+
Queries.Clear();
80+
return;
81+
}
82+
6883
#if EF5 || EF6
6984
var connection = (EntityConnection) Context.Connection;
7085
#elif EFCORE
86+
if (IsInMemory)
87+
{
88+
foreach (var query in Queries)
89+
{
90+
query.ExecuteInMemory();
91+
}
92+
return;
93+
}
94+
7195
var connection = Context.Database.GetDbConnection();
7296
#endif
7397
var command = CreateCommandCombined();
@@ -243,15 +267,27 @@ protected DbCommand CreateCommandCombined()
243267

244268
if (isOracle)
245269
{
270+
#if NETSTANDARD1_3
271+
SetOracleDbType(command.GetType().GetTypeInfo().Assembly, param, 121);
272+
#else
246273
SetOracleDbType(command.GetType().Assembly, param, 121);
274+
#endif
247275
}
248276
else if (isOracleManaged)
249277
{
278+
#if NETSTANDARD1_3
279+
SetOracleManagedDbType(command.GetType().GetTypeInfo().Assembly, param, 121);
280+
#else
250281
SetOracleManagedDbType(command.GetType().Assembly, param, 121);
282+
#endif
251283
}
252284
else if (isOracleDevArt)
253285
{
286+
#if NETSTANDARD1_3
287+
SetOracleDevArtDbType(command.GetType().GetTypeInfo().Assembly, param, 7);
288+
#else
254289
SetOracleDevArtDbType(command.GetType().Assembly, param, 7);
290+
#endif
255291
}
256292

257293

src/Z.EntityFramework.Plus.EF5.NET40/QueryFuture/QueryFutureEnumerable.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Collections;
99
using System.Collections.Generic;
1010
using System.Data.Common;
11+
using System.Linq;
1112
#if EF5
1213
using System.Data.Objects;
1314

@@ -78,8 +79,19 @@ IEnumerator IEnumerable.GetEnumerator()
7879
/// <param name="reader">The reader returned from the query execution.</param>
7980
public override void SetResult(DbDataReader reader)
8081
{
82+
if (reader.GetType().FullName.Contains("Oracle"))
83+
{
84+
var reader2 = new QueryFutureOracleDbReader(reader);
85+
reader = reader2;
86+
}
87+
8188
var enumerator = GetQueryEnumerator<T>(reader);
8289

90+
SetResult(enumerator);
91+
}
92+
93+
public void SetResult(IEnumerator<T> enumerator)
94+
{
8395
// Enumerate on all items
8496
var list = new List<T>();
8597
while (enumerator.MoveNext())
@@ -90,5 +102,20 @@ public override void SetResult(DbDataReader reader)
90102

91103
HasValue = true;
92104
}
105+
106+
#if EFCORE
107+
public override void ExecuteInMemory()
108+
{
109+
HasValue = true;
110+
_result = ((IQueryable<T>) Query).ToList();
111+
}
112+
#endif
113+
public override void GetResultDirectly()
114+
{
115+
var query = ((IQueryable<T>)Query);
116+
var enumerator = query.GetEnumerator();
117+
118+
SetResult(enumerator);
119+
}
93120
}
94121
}

0 commit comments

Comments
 (0)