Skip to content

Commit 3a555ac

Browse files
author
zzzprojects
committed
Added .NET Standard 2.0 support
Added .NET Standard 2.0 support
1 parent 25fa51e commit 3a555ac

File tree

9 files changed

+113
-9
lines changed

9 files changed

+113
-9
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup Label="Globals">
4+
<SccProjectName>SAK</SccProjectName>
5+
<SccProvider>SAK</SccProvider>
6+
<SccAuxPath>SAK</SccAuxPath>
7+
<SccLocalPath>SAK</SccLocalPath>
8+
</PropertyGroup>
9+
10+
<PropertyGroup>
11+
<TargetFramework>netstandard2.0</TargetFramework>
12+
<AssemblyName>Z.EntityFramework.Plus.EFCore</AssemblyName>
13+
<SignAssembly>true</SignAssembly>
14+
<AssemblyOriginatorKeyFile>zzzproject.pfx</AssemblyOriginatorKeyFile>
15+
<PackageId>Z.EntityFramework.Plus.EFCore</PackageId>
16+
<Version>1.6.11</Version>
17+
<Description>Description: EF Bulk Operations &amp; Utilities | Bulk Insert, Update, Delete, Merge from database.</Description>
18+
<AssemblyVersion>1.6.11.0</AssemblyVersion>
19+
<FileVersion>1.6.11.0</FileVersion>
20+
</PropertyGroup>
21+
22+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
23+
<DefineConstants>TRACE;DEBUG;NETSTANDARD2_0;EFCORE NET45 FULL;NETSTANDARD2_0;</DefineConstants>
24+
</PropertyGroup>
25+
26+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
27+
<DefineConstants>TRACE;RELEASE;NETSTANDARD2_0;EFCORE NET45 FULL</DefineConstants>
28+
</PropertyGroup>
29+
30+
<Import Project="..\shared\Z.EF.Plus._Core.Shared\Z.EF.Plus._Core.Shared.projitems" Label="Shared" />
31+
32+
<Import Project="..\shared\Z.EF.Plus._ExceptionMessage.Shared\Z.EF.Plus._ExceptionMessage.Shared.projitems" Label="Shared" />
33+
34+
<Import Project="..\shared\Z.EF.Plus.Audit.Shared\Z.EF.Plus.Audit.Shared.projitems" Label="Shared" />
35+
36+
<Import Project="..\shared\Z.EF.Plus.BatchDelete.Shared\Z.EF.Plus.BatchDelete.Shared.projitems" Label="Shared" />
37+
38+
<Import Project="..\shared\Z.EF.Plus.QueryCache.Shared\Z.EF.Plus.QueryCache.Shared.projitems" Label="Shared" />
39+
40+
<Import Project="..\shared\Z.EF.Plus.BatchUpdate.Shared\Z.EF.Plus.BatchUpdate.Shared.projitems" Label="Shared" />
41+
42+
<Import Project="..\shared\Z.EF.Plus.QueryDeferred.Shared\Z.EF.Plus.QueryDeferred.Shared.projitems" Label="Shared" />
43+
44+
<Import Project="..\shared\Z.EF.Plus.QueryFilter.Shared\Z.EF.Plus.QueryFilter.Shared.projitems" Label="Shared" />
45+
46+
<Import Project="..\shared\Z.EF.Plus.QueryFuture.Shared\Z.EF.Plus.QueryFuture.Shared.projitems" Label="Shared" />
47+
48+
<ItemGroup>
49+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.0.0" />
50+
<PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
51+
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" />
52+
</ItemGroup>
53+
54+
</Project>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
""
2+
{
3+
"FILE_VERSION" = "9237"
4+
"ENLISTMENT_CHOICE" = "NEVER"
5+
"PROJECT_FILE_RELATIVE_PATH" = ""
6+
"NUMBER_OF_EXCLUDED_FILES" = "0"
7+
"ORIGINAL_PROJECT_FILE_PATH" = ""
8+
"NUMBER_OF_NESTED_PROJECTS" = "0"
9+
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
10+
}

src/Z.EntityFramework.Plus.sln

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 15
4-
VisualStudioVersion = 15.0.26430.6
4+
VisualStudioVersion = 15.0.26730.3
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{14D8985E-0AA8-444A-A32E-D766ABA114D6}"
77
EndProject
@@ -51,6 +51,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z.EntityFramework.Plus.EFCo
5151
EndProject
5252
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Z.EntityFramework.Plus.EFCore.NETStandard", "Z.EntityFramework.Plus.EFCore.NETStandard\Z.EntityFramework.Plus.EFCore.NETStandard.csproj", "{C85E4987-DD55-4182-8125-6C8D996F4328}"
5353
EndProject
54+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Z.EntityFramework.Plus.EFCore.NETStandard20", "Z.EntityFramework.Plus.EFCore.NETStandard20\Z.EntityFramework.Plus.EFCore.NETStandard20.csproj", "{EF1CBE03-3B93-4F28-8D98-3166320F62DB}"
55+
EndProject
5456
Global
5557
GlobalSection(SharedMSBuildProjectFiles) = preSolution
5658
shared\Z.EF.Plus.Audit.Shared\Z.EF.Plus.Audit.Shared.projitems*{035d058a-0dd2-4a74-b1e7-68e482c7c806}*SharedItemsImports = 4
@@ -163,6 +165,10 @@ Global
163165
{C85E4987-DD55-4182-8125-6C8D996F4328}.Debug|Any CPU.Build.0 = Debug|Any CPU
164166
{C85E4987-DD55-4182-8125-6C8D996F4328}.Release|Any CPU.ActiveCfg = Release|Any CPU
165167
{C85E4987-DD55-4182-8125-6C8D996F4328}.Release|Any CPU.Build.0 = Release|Any CPU
168+
{EF1CBE03-3B93-4F28-8D98-3166320F62DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
169+
{EF1CBE03-3B93-4F28-8D98-3166320F62DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
170+
{EF1CBE03-3B93-4F28-8D98-3166320F62DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
171+
{EF1CBE03-3B93-4F28-8D98-3166320F62DB}.Release|Any CPU.Build.0 = Release|Any CPU
166172
EndGlobalSection
167173
GlobalSection(SolutionProperties) = preSolution
168174
HideSolutionNode = FALSE
@@ -185,4 +191,7 @@ Global
185191
{DC4C972B-6AE7-4620-B2CB-2AFD106E638B} = {45D50C58-9B18-475A-9839-D6754E87352B}
186192
{D1953D60-B322-4CAF-92DF-0581A1FD758F} = {45D50C58-9B18-475A-9839-D6754E87352B}
187193
EndGlobalSection
194+
GlobalSection(ExtensibilityGlobals) = postSolution
195+
SolutionGuid = {AEE441E3-DEE9-48F2-9212-1F3A573007AE}
196+
EndGlobalSection
188197
EndGlobal

src/shared/Z.EF.Plus.QueryFuture.Shared/BaseQueryFuture.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,12 @@ public virtual IRelationalCommand CreateExecutorAndGetCommand(out RelationalQuer
8484
var context = Query.GetDbContext();
8585

8686
// REFLECTION: Query._context.StateManager
87+
#if NETSTANDARD2_0
88+
var stateManager = context.ChangeTracker.GetStateManager();
89+
#else
8790
var stateManagerProperty = typeof(DbContext).GetProperty("StateManager", BindingFlags.NonPublic | BindingFlags.Instance);
8891
var stateManager = (StateManager)stateManagerProperty.GetValue(context);
92+
#endif
8993

9094
// REFLECTION: Query._context.StateManager._concurrencyDetector
9195
var concurrencyDetectorField = typeof(StateManager).GetField("_concurrencyDetector", BindingFlags.NonPublic | BindingFlags.Instance);
@@ -100,16 +104,25 @@ public virtual IRelationalCommand CreateExecutorAndGetCommand(out RelationalQuer
100104
var nodeTypeProvider = nodeTypeProviderField.GetValue(queryCompiler);
101105

102106
// REFLECTION: Query.Provider._queryCompiler.CreateQueryParser();
107+
#if NETSTANDARD2_0
108+
var createQueryParserMethod = queryCompiler.GetType().GetMethod("CreateQueryParser", BindingFlags.NonPublic | BindingFlags.Instance);
109+
var createQueryParser = (QueryParser)createQueryParserMethod.Invoke(queryCompiler, new[] { nodeTypeProvider });
110+
#else
103111
var createQueryParserMethod = queryCompiler.GetType().GetMethod("CreateQueryParser", BindingFlags.NonPublic | BindingFlags.Static);
104112
var createQueryParser = (QueryParser)createQueryParserMethod.Invoke(null, new[] { nodeTypeProvider });
113+
#endif
105114

106115
// REFLECTION: Query.Provider._queryCompiler._database
107116
var databaseField = queryCompiler.GetType().GetField("_database", BindingFlags.NonPublic | BindingFlags.Instance);
108117
var database = (IDatabase) databaseField.GetValue(queryCompiler);
109118

110119
// REFLECTION: Query.Provider._queryCompiler._evaluatableExpressionFilter
120+
#if NETSTANDARD2_0
121+
var evaluatableExpressionFilter = (IEvaluatableExpressionFilter)queryCompiler.GetType().GetField("_evaluatableExpressionFilter", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(queryCompiler);
122+
#else
111123
var evaluatableExpressionFilterField = queryCompiler.GetType().GetField("_evaluatableExpressionFilter", BindingFlags.NonPublic | BindingFlags.Static);
112124
var evaluatableExpressionFilter = (IEvaluatableExpressionFilter) evaluatableExpressionFilterField.GetValue(null);
125+
#endif
113126

114127
// REFLECTION: Query.Provider._queryCompiler._queryContextFactory
115128
var queryContextFactoryField = queryCompiler.GetType().GetField("_queryContextFactory", BindingFlags.NonPublic | BindingFlags.Instance);
@@ -249,8 +262,8 @@ public virtual IRelationalCommand CreateExecutorAndGetCommand(out RelationalQuer
249262
}
250263
#endif
251264

252-
/// <summary>Sets the result of the query deferred.</summary>
253-
/// <param name="reader">The reader returned from the query execution.</param>
265+
/// <summary>Sets the result of the query deferred.</summary>
266+
/// <param name="reader">The reader returned from the query execution.</param>
254267
public virtual void SetResult(DbDataReader reader)
255268
{
256269
}

src/shared/Z.EF.Plus._Core.Shared/DynamicAnonymousType/DynamicAnonymousType.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ internal static class DynamicAnonymousType
2020
{
2121

2222
private static readonly AssemblyName AssemblyName = new AssemblyName { Name = "<>f__AnonymousType" };
23-
#if NETSTANDARD1_3
23+
#if NETSTANDARD1_3 || NETSTANDARD2_0
2424
private static readonly ModuleBuilder ModuleBuilder = System.Reflection.Emit.AssemblyBuilder.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess.Run).DefineDynamicModule(AssemblyName.Name);
2525
#else
2626
private static readonly ModuleBuilder ModuleBuilder = Thread.GetDomain().DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess.Run).DefineDynamicModule(AssemblyName.Name);
@@ -112,7 +112,7 @@ public static Type GetDynamicType(List<Tuple<string, Type>> fields)
112112
foreach (var field in fields)
113113
typeBuilder.DefineField(field.Item1, field.Item2, FieldAttributes.Public);
114114

115-
#if NETSTANDARD1_3
115+
#if NETSTANDARD1_3 || NETSTANDARD2_0
116116
BuiltTypes[typeKey] = new Tuple<string, Type>(typeName, typeBuilder.CreateTypeInfo().AsType());
117117
#else
118118
BuiltTypes[typeKey] = new Tuple<string, Type>(typeName, typeBuilder.CreateType());

src/shared/Z.EF.Plus._Core.Shared/EFCore/DbContext/DbContext.IsEFCore2x.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ public static partial class DbContextExtensions
1717
{
1818
public static bool IsEFCore2x(this DbContext context)
1919
{
20+
#if NETSTANDARD2_0
21+
return true;
22+
#else
2023
return false;
24+
#endif
2125
//var assembly = context.Database.GetType().Assembly;
2226
//var version = assembly.GetName().Version;
2327
//return version.Major >= 2;

src/shared/Z.EF.Plus._Core.Shared/EFCore/GetStateManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@ internal static partial class InternalExtensions
1717
{
1818
internal static StateManager GetStateManager(this ChangeTracker changeTracker)
1919
{
20+
#if NETSTANDARD2_0
21+
var _stateManagerField = changeTracker.GetType().GetProperty("StateManager", BindingFlags.NonPublic | BindingFlags.Instance);
22+
return (StateManager)_stateManagerField.GetValue(changeTracker);
23+
#else
2024
var _stateManagerField = changeTracker.GetType().GetField("_stateManager", BindingFlags.NonPublic | BindingFlags.Instance);
2125
return (StateManager)_stateManagerField.GetValue(changeTracker);
26+
#endif
2227
}
2328
}
2429
}

src/shared/Z.EF.Plus._Core.Shared/EFCore/IQueryable`/CreateCommand.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,6 @@ public static IRelationalCommand CreateCommand(this IQueryable source, out Relat
128128

129129
queryContext = (RelationalQueryContext)queryContextFactory.Create();
130130

131-
var evalutableExpressionFilterField = compiler.GetType().GetField("_evaluatableExpressionFilter", BindingFlags.NonPublic | BindingFlags.Static);
132-
133-
var evalutableExpressionFilter = (IEvaluatableExpressionFilter)evalutableExpressionFilterField.GetValue(null);
134131
var databaseField = compiler.GetType().GetField("_database", BindingFlags.NonPublic | BindingFlags.Instance);
135132
var database = (IDatabase)databaseField.GetValue(compiler);
136133

@@ -139,8 +136,15 @@ public static IRelationalCommand CreateCommand(this IQueryable source, out Relat
139136
var queryCompiler = queryCompilerField.GetValue(source.Provider);
140137

141138
// REFLECTION: Query.Provider._queryCompiler._evaluatableExpressionFilter
139+
#if NETSTANDARD2_0
140+
var evaluatableExpressionFilter = (IEvaluatableExpressionFilter)compiler.GetType().GetField("_evaluatableExpressionFilter", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(queryCompiler);
141+
#else
142+
var evalutableExpressionFilterField = compiler.GetType().GetField("_evaluatableExpressionFilter", BindingFlags.NonPublic | BindingFlags.Static);
143+
var evalutableExpressionFilter = (IEvaluatableExpressionFilter)evalutableExpressionFilterField.GetValue(null);
144+
142145
var evaluatableExpressionFilterField = queryCompiler.GetType().GetField("_evaluatableExpressionFilter", BindingFlags.NonPublic | BindingFlags.Static);
143146
var evaluatableExpressionFilter = (IEvaluatableExpressionFilter)evaluatableExpressionFilterField.GetValue(null);
147+
#endif
144148

145149
Expression newQuery;
146150
IQueryCompilationContextFactory queryCompilationContextFactory;
@@ -189,8 +193,13 @@ public static IRelationalCommand CreateCommand(this IQueryable source, out Relat
189193
//var query = new QueryAnnotatingExpressionVisitor().Visit(source.Expression);
190194
//var newQuery = ParameterExtractingExpressionVisitor.ExtractParameters(query, queryContext, evalutableExpressionFilter);
191195

196+
#if NETSTANDARD2_0
197+
var queryParserMethod = compiler.GetType().GetMethod("CreateQueryParser", BindingFlags.NonPublic | BindingFlags.Instance);
198+
var queryparser = (QueryParser)queryParserMethod.Invoke(compiler, new[] { nodeTypeProvider });
199+
#else
192200
var queryParserMethod = compiler.GetType().GetMethod("CreateQueryParser", BindingFlags.NonPublic | BindingFlags.Static);
193201
var queryparser = (QueryParser)queryParserMethod.Invoke(null, new[] { nodeTypeProvider });
202+
#endif
194203
var queryModel = queryparser.GetParsedQuery(newQuery);
195204

196205
var queryModelVisitor = (RelationalQueryModelVisitor)queryCompilationContextFactory.Create(false).CreateQueryModelVisitor();

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.6.10
1+
v1.6.11

0 commit comments

Comments
 (0)