Skip to content
This repository was archived by the owner on Feb 1, 2025. It is now read-only.

Commit 6576004

Browse files
authored
v3 updates (#266)
* updates * revert dependency updates
1 parent b285c8d commit 6576004

File tree

14 files changed

+73
-55
lines changed

14 files changed

+73
-55
lines changed

Directory.Packages.props

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
<Project>
22
<ItemGroup>
3-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
4-
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
3+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
4+
<PackageVersion Include="NUnit3TestAdapter" Version="4.3.0" />
55
<PackageVersion Include="NUnit" Version="3.13.3" />
6-
<PackageVersion Include="FluentAssertions" Version="6.6.0" />
6+
<PackageVersion Include="FluentAssertions" Version="6.8.0" />
77

88
<PackageVersion Include="linq2db" Version="4.3.0" />
99
<PackageVersion Include="linq2db.Tools" Version="4.3.0" />
1010

1111
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
1212
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="6.0.0" />
1313

14-
1514
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.25" />
1615
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.25" />
1716

@@ -20,7 +19,7 @@
2019

2120
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="3.2.7" />
2221
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.18" />
23-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.25" />
24-
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.25" />
22+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.31" />
23+
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.31" />
2524
</ItemGroup>
2625
</Project>

NuGet/linq2db.EntityFrameworkCore.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<title>Linq to DB (linq2db) extensions for Entity Framework Core 3.1</title>
66
<authors>Igor Tkachev, Ilya Chudin, Svyatoslav Danyliv, Dmitry Lukashenko</authors>
77
<owners>Igor Tkachev, Ilya Chudin, Svyatoslav Danyliv, Dmitry Lukashenko</owners>
8-
<copyright>Copyright © 2020-2021 Igor Tkachev, Ilya Chudin, Svyatoslav Danyliv, Dmitry Lukashenko</copyright>
8+
<copyright>Copyright © 2020-2022 Igor Tkachev, Ilya Chudin, Svyatoslav Danyliv, Dmitry Lukashenko</copyright>
99
<description>Allows to execute Linq to DB (linq2db) queries in Entity Framework Core DbContext.</description>
1010
<summary />
1111
<tags>linq linq2db LinqToDB ORM database entity-framework-core EntityFrameworkCore EFCore DB SQL SqlServer SqlCe SqlServerCe MySql Firebird SQLite Oracle ODP PostgreSQL DB2</tags>

Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace LinqToDB.EntityFrameworkCore
3030
/// <summary>
3131
/// LINQ To DB metadata reader for EF.Core model.
3232
/// </summary>
33-
internal class EFCoreMetadataReader : IMetadataReader
33+
internal sealed class EFCoreMetadataReader : IMetadataReader
3434
{
3535
readonly IModel? _model;
3636
private readonly RelationalSqlTranslatingExpressionVisitorDependencies? _dependencies;
@@ -235,7 +235,7 @@ public T[] GetAttributes<T>(Type type, MemberInfo memberInfo, bool inherit = tru
235235
{
236236
if (a.Value is string str)
237237
{
238-
return str.ToLower().Contains("nextval");
238+
return str.ToLowerInvariant().Contains("nextval");
239239
}
240240
}
241241

@@ -252,7 +252,8 @@ public T[] GetAttributes<T>(Type type, MemberInfo memberInfo, bool inherit = tru
252252
}
253253
else
254254
{
255-
dataType = SqlDataType.GetDataType(typeMapping.ClrType).Type.DataType;
255+
var ms = _model != null ? LinqToDBForEFTools.GetMappingSchema(_model, null) : MappingSchema.Default;
256+
dataType = ms.GetDataType(typeMapping.ClrType).Type.DataType;
256257
}
257258
}
258259

@@ -404,7 +405,7 @@ public T[] GetAttributes<T>(Type type, MemberInfo memberInfo, bool inherit = tru
404405
return Array.Empty<T>();
405406
}
406407

407-
class ValueConverter : IValueConverter
408+
sealed class ValueConverter : IValueConverter
408409
{
409410
public ValueConverter(
410411
LambdaExpression convertToProviderExpression,
@@ -421,7 +422,7 @@ public ValueConverter(
421422

422423
}
423424

424-
class SqlTransparentExpression : SqlExpression
425+
sealed class SqlTransparentExpression : SqlExpression
425426
{
426427
public Expression Expression { get; }
427428

@@ -435,7 +436,7 @@ public override void Print(ExpressionPrinter expressionPrinter)
435436
expressionPrinter.Print(Expression);
436437
}
437438

438-
protected bool Equals(SqlTransparentExpression other)
439+
private bool Equals(SqlTransparentExpression other)
439440
{
440441
return ReferenceEquals(this, other);
441442
}

Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsDataConnection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public Expression ProcessExpression(Expression expression)
131131
return _transformFunc(expression, this, Context, _model);
132132
}
133133

134-
private class TypeKey
134+
private sealed class TypeKey
135135
{
136136
public TypeKey(IEntityType entityType, IModel? model)
137137
{
@@ -142,7 +142,7 @@ public TypeKey(IEntityType entityType, IModel? model)
142142
public IEntityType EntityType { get; }
143143
public IModel? Model { get; }
144144

145-
protected bool Equals(TypeKey other)
145+
private bool Equals(TypeKey other)
146146
{
147147
return EntityType.Equals(other.EntityType) && Equals(Model, other.Model);
148148
}

Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ namespace LinqToDB.EntityFrameworkCore
4444
[PublicAPI]
4545
public class LinqToDBForEFToolsImplDefault : ILinqToDBForEFTools
4646
{
47-
class ProviderKey
47+
sealed class ProviderKey
4848
{
4949
public ProviderKey(string? providerName, string? connectionString)
5050
{
@@ -57,7 +57,7 @@ public ProviderKey(string? providerName, string? connectionString)
5757

5858
#region Equality members
5959

60-
protected bool Equals(ProviderKey other)
60+
private bool Equals(ProviderKey other)
6161
{
6262
return string.Equals(ProviderName, other.ProviderName) && string.Equals(ConnectionString, other.ConnectionString);
6363
}
@@ -161,31 +161,44 @@ protected virtual IDataProvider CreateLinqToDbDataProvider(EFProviderInfo provid
161161

162162
switch (provInfo.ProviderName)
163163
{
164-
case ProviderName.SqlServer:
165-
return CreateSqlServerProvider(SqlServerDefaultVersion, connectionInfo.ConnectionString);
166-
case ProviderName.MySql:
167-
case ProviderName.MySqlConnector:
168-
return MySqlTools.GetDataProvider(provInfo.ProviderName);
169-
case ProviderName.PostgreSQL:
170-
return CreatePostgreSqlProvider(PostgreSqlDefaultVersion, connectionInfo.ConnectionString);
171-
case ProviderName.SQLite:
172-
return SQLiteTools.GetDataProvider(provInfo.ProviderName);
173-
case ProviderName.Firebird:
174-
return FirebirdTools.GetDataProvider();
175-
case ProviderName.DB2:
176-
case ProviderName.DB2LUW:
177-
return DB2Tools.GetDataProvider(DB2Version.LUW);
178-
case ProviderName.DB2zOS:
179-
return DB2Tools.GetDataProvider(DB2Version.zOS);
180-
case ProviderName.Oracle:
181-
return OracleTools.GetDataProvider(provInfo.ProviderName, version: OracleVersion.v11);
182-
case ProviderName.SqlCe:
183-
return SqlCeTools.GetDataProvider();
184-
//case ProviderName.Access:
185-
// return new AccessDataProvider();
186-
187-
default:
188-
throw new LinqToDBForEFToolsException($"Can not instantiate data provider '{provInfo.ProviderName}'.");
164+
case ProviderName.SqlServer:
165+
return CreateSqlServerProvider(SqlServerDefaultVersion, connectionInfo.ConnectionString);
166+
case ProviderName.MySql:
167+
case ProviderName.MySqlConnector:
168+
return MySqlTools.GetDataProvider(provInfo.ProviderName);
169+
case ProviderName.PostgreSQL:
170+
return CreatePostgreSqlProvider(PostgreSqlDefaultVersion, connectionInfo.ConnectionString);
171+
case ProviderName.SQLite:
172+
return SQLiteTools.GetDataProvider(provInfo.ProviderName);
173+
case ProviderName.Firebird:
174+
return FirebirdTools.GetDataProvider();
175+
case ProviderName.DB2:
176+
case ProviderName.DB2LUW:
177+
return DB2Tools.GetDataProvider(DB2Version.LUW);
178+
case ProviderName.DB2zOS:
179+
return DB2Tools.GetDataProvider(DB2Version.zOS);
180+
181+
case ProviderName.Oracle11Native:
182+
return OracleTools.GetDataProvider(OracleVersion.v11, OracleProvider.Native);
183+
case ProviderName.OracleNative:
184+
return OracleTools.GetDataProvider(OracleVersion.v12, OracleProvider.Native);
185+
case ProviderName.Oracle11Managed:
186+
return OracleTools.GetDataProvider(OracleVersion.v11, OracleProvider.Managed);
187+
case ProviderName.Oracle:
188+
case ProviderName.OracleManaged:
189+
return OracleTools.GetDataProvider(OracleVersion.v12, OracleProvider.Managed);
190+
case ProviderName.Oracle11Devart:
191+
return OracleTools.GetDataProvider(OracleVersion.v11, OracleProvider.Devart);
192+
case ProviderName.OracleDevart:
193+
return OracleTools.GetDataProvider(OracleVersion.v12, OracleProvider.Devart);
194+
195+
case ProviderName.SqlCe:
196+
return SqlCeTools.GetDataProvider();
197+
//case ProviderName.Access:
198+
// return new AccessDataProvider();
199+
200+
default:
201+
throw new LinqToDBForEFToolsException($"Can not instantiate data provider '{provInfo.ProviderName}'.");
189202
}
190203
}
191204

Tests/LinqToDB.EntityFrameworkCore.BaseTests/Logging/NullExternalScopeProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace LinqToDB.EntityFrameworkCore.BaseTests.Logging
66
/// <summary>
77
/// Scope provider that does nothing.
88
/// </summary>
9-
internal class NullExternalScopeProvider : IExternalScopeProvider
9+
internal sealed class NullExternalScopeProvider : IExternalScopeProvider
1010
{
1111
private NullExternalScopeProvider()
1212
{

Tests/LinqToDB.EntityFrameworkCore.BaseTests/Logging/NullScope.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace LinqToDB.EntityFrameworkCore.BaseTests.Logging
44
{
5-
internal class NullScope : IDisposable
5+
internal sealed class NullScope : IDisposable
66
{
77
public static NullScope Instance { get; } = new NullScope();
88

Tests/LinqToDB.EntityFrameworkCore.BaseTests/Logging/TestLogger.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace LinqToDB.EntityFrameworkCore.BaseTests.Logging
88
{
9-
internal class TestLogger : ILogger
9+
internal sealed class TestLogger : ILogger
1010
{
1111
private static readonly string _loglevelPadding = ": ";
1212
private static readonly string _messagePadding;
@@ -58,7 +58,7 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
5858
}
5959
}
6060

61-
public virtual void WriteMessage(LogLevel logLevel, string logName, int eventId, string message, Exception exception)
61+
public void WriteMessage(LogLevel logLevel, string logName, int eventId, string message, Exception exception)
6262
{
6363
var format = Options!.FormatterName;
6464
Debug.Assert(format is ConsoleFormatterNames.Simple or ConsoleFormatterNames.Systemd);
@@ -99,7 +99,7 @@ private void EnqueueMessage(LogMessageEntry entry)
9999
WriteMessage(entry);
100100
}
101101

102-
internal virtual void WriteMessage(LogMessageEntry message)
102+
internal void WriteMessage(LogMessageEntry message)
103103
{
104104
if (message.TimeStamp != null)
105105
{

Tests/LinqToDB.EntityFrameworkCore.BaseTests/Models/Northwind/NorthwindData.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ private static void AddEntities(DbContext context)
145145
context.Set<OrderDetail>().AddRange(CreateOrderDetails());
146146
}
147147

148-
private class AsyncEnumerable<T> : IAsyncQueryProvider, IOrderedQueryable<T>
148+
private sealed class AsyncEnumerable<T> : IAsyncQueryProvider, IOrderedQueryable<T>
149149
{
150150
private readonly EnumerableQuery<T> _enumerableQuery;
151151

@@ -176,7 +176,7 @@ public TResult Execute<TResult>(Expression expression)
176176
private static Expression RewriteShadowPropertyAccess(Expression expression)
177177
=> new ShadowStateAccessRewriter().Visit(expression);
178178

179-
private class ShadowStateAccessRewriter : ExpressionVisitor
179+
private sealed class ShadowStateAccessRewriter : ExpressionVisitor
180180
{
181181
protected override Expression VisitMethodCall(MethodCallExpression node)
182182
=> node.Method.IsEFPropertyMethod()

Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/SampleTests/StringExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public static string ToSnakeCase(this string input)
1010
return input;
1111

1212
var startUnderscores = Regex.Match(input, @"^_+");
13-
return startUnderscores + Regex.Replace(input, @"([a-z0-9])([A-Z])", "$1_$2").ToLower();
13+
return startUnderscores + Regex.Replace(input, @"([a-z0-9])([A-Z])", "$1_$2").ToLowerInvariant();
1414
}
1515
}
1616
}

Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/JsonConverTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
7070
entity.Property(e => e.NameLocalized)
7171
.HasColumnName("NameLocalized_JSON")
7272
.HasConversion(v => JsonConvert.SerializeObject(v),
73-
v => JsonConvert.DeserializeObject<LocalizedString>(v));
73+
v => JsonConvert.DeserializeObject<LocalizedString>(v) ?? new());
7474
entity.Property(e => e.CrashEnum).HasColumnType("tinyint");
7575
entity.Property(e => e.GuidColumn).HasColumnType("uniqueidentifier");
7676
});

Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/QueryableExtensions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Diagnostics.CodeAnalysis;
34
using System.Linq;
45
using System.Linq.Expressions;
56
using System.Threading;
@@ -70,7 +71,7 @@ public static IQueryable<T> FilterByProperties<T, TValue>(this IQueryable<T> que
7071
return query.Where(MakePropertiesPredicate<T, TValue>(pattern, searchValue, isOr));
7172
}
7273

73-
class ExpressionReplacer : ExpressionVisitor
74+
sealed class ExpressionReplacer : ExpressionVisitor
7475
{
7576
readonly IDictionary<Expression, Expression> _replaceMap;
7677

@@ -79,7 +80,8 @@ public ExpressionReplacer(IDictionary<Expression, Expression> replaceMap)
7980
_replaceMap = replaceMap ?? throw new ArgumentNullException(nameof(replaceMap));
8081
}
8182

82-
public override Expression Visit(Expression node)
83+
[return: NotNullIfNotNull("node")]
84+
public override Expression? Visit(Expression? node)
8385
{
8486
if (node != null && _replaceMap.TryGetValue(node, out var replacement))
8587
return replacement;

azure-pipelines.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ stages:
3333

3434
steps:
3535

36+
- task: UseDotNet@2
37+
displayName: 'Use .NET 7'
38+
inputs:
39+
version: 7.x
40+
3641
- task: PowerShell@2
3742
inputs:
3843
filePath: '$(Build.SourcesDirectory)/Build/SetVersion.ps1'
@@ -91,7 +96,6 @@ stages:
9196
displayName: Publish to Azure Artifacts feed
9297
condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'version3'))
9398

94-
# apikey exires around 31/07/2020
9599
- task: NuGetCommand@2
96100
inputs:
97101
command: 'push'

linq2db.EFCore.sln

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{A3F30061
1111
.gitignore = .gitignore
1212
azure-pipelines.yml = azure-pipelines.yml
1313
Directory.Packages.props = Directory.Packages.props
14-
global.json = global.json
1514
Build\linq2db.Default.props = Build\linq2db.Default.props
1615
Build\linq2db.snk = Build\linq2db.snk
1716
Build\linq2db.Tests.props = Build\linq2db.Tests.props

0 commit comments

Comments
 (0)