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

Commit 727a2a2

Browse files
committed
Merge branch 'version3' into version2
# Conflicts: # .editorconfig # Directory.Build.props # Directory.Packages.props # NuGet/linq2db.EntityFrameworkCore.nuspec # Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs # Source/LinqToDB.EntityFrameworkCore/Internal/EFCoreExpressionAttribute.cs # Source/LinqToDB.EntityFrameworkCore/Internal/LinqToDBForEFQueryProvider.cs # Source/LinqToDB.EntityFrameworkCore/Internal/LinqToDBOptionsExtension.cs # Source/LinqToDB.EntityFrameworkCore/LinqToDBExtensionsAdapter.cs # Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFTools.ContextExtensions.cs # Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFTools.Extensions.cs # Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFTools.cs # Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsDataConnection.cs # Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs # Source/LinqToDB.EntityFrameworkCore/linq2db.EntityFrameworkCore.csproj # Tests/Directory.Build.props # Tests/LinqToDB.EntityFrameworkCore.BaseTests/ForMappingTestsBase.cs # Tests/LinqToDB.EntityFrameworkCore.BaseTests/Interceptors/TestEfCoreAndLinqToDBComboInterceptor.cs # Tests/LinqToDB.EntityFrameworkCore.BaseTests/Logging/LogMessageEntry.cs # Tests/LinqToDB.EntityFrameworkCore.BaseTests/Logging/TestLogger.cs # Tests/LinqToDB.EntityFrameworkCore.BaseTests/Logging/TestLoggerProvider.cs # Tests/LinqToDB.EntityFrameworkCore.BaseTests/Models/Northwind/NorthwindData.Objects.cs # Tests/LinqToDB.EntityFrameworkCore.BaseTests/Models/Northwind/NorthwindData.cs # Tests/LinqToDB.EntityFrameworkCore.BaseTests/TestsBase.cs # Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/ForMappingTests.cs # Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests/LinqToDB.EntityFrameworkCore.PomeloMySql.Tests.csproj # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/ForMappingTests.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/ForMapping/ForMappingContext.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/EntityWithXmin.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/NpgSqlEnititesContext.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/NpgSqlTests.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/SampleTests/AAA.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/SampleTests/Id.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/SampleTests/IdTests.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/SampleTests/ModelBuilderExtensions.cs # Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/SampleTests/StringExtensions.cs # Tests/LinqToDB.EntityFrameworkCore.SQLite.Tests/ForMappingTests.cs # Tests/LinqToDB.EntityFrameworkCore.SQLite.Tests/InterceptorTests.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/ForMappingTests.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/JsonConverTests.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/ForMapping/ForMappingContext.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/IssueModel/IssueContext.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/CustomerCustomerDemoMap.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/CustomerDemographicsMap.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/EmployeeTerritoriesMap.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/RegionMap.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind.Mapping/TerritoriesMap.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Models/Northwind/NorthwindContext.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/Settings.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/ToolsTests.cs # Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/ValueConversion/ConvertorTests.cs # azure-pipelines.yml # linq2db.EFCore.sln
2 parents 39026e8 + 337a42a commit 727a2a2

Some content is hidden

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

43 files changed

+965
-850
lines changed

.editorconfig

+325-3
Large diffs are not rendered by default.

Directory.Build.props

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
22
<PropertyGroup>
3-
<Version>2.13.0</Version>
3+
<Version>2.14.0</Version>
44

55
<Authors>Svyatoslav Danyliv, Igor Tkachev, Dmitry Lukashenko, Ilya Chudin</Authors>
66
<Product>Linq to DB</Product>
77
<Company>linq2db.net</Company>
8-
<Copyright>2002-2023 linq2db.net</Copyright>
8+
<Copyright>2002-2024 linq2db.net</Copyright>
99
<RepositoryUrl>https://github.com/linq2db/linq2db.EntityFrameworkCore</RepositoryUrl>
1010
<RepositoryType>git</RepositoryType>
1111

@@ -29,7 +29,7 @@
2929
<GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
3030
<GenerateAssemblyFileVersionAttribute>true</GenerateAssemblyFileVersionAttribute>
3131
<GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
32-
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
32+
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
3333

3434
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
3535

Directory.Packages.props

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
<Project>
22
<ItemGroup>
3-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
3+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
44
<PackageVersion Include="NUnit3TestAdapter" Version="4.5.0" />
5-
<PackageVersion Include="NUnit" Version="3.13.3" />
5+
<PackageVersion Include="NUnit" Version="3.14.0" />
66
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
77

8-
<PackageVersion Include="linq2db" Version="5.3.1" />
9-
<PackageVersion Include="linq2db.Tools" Version="5.3.1" />
8+
<PackageVersion Include="linq2db" Version="5.4.0" />
9+
<PackageVersion Include="linq2db.Tools" Version="5.4.0" />
10+
11+
<PackageVersion Include="NUnit.Analyzers" Version="4.0.1" />
12+
<PackageVersion Include="Meziantou.Analyzer" Version="2.0.145" />
1013

1114
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
1215
<PackageVersion Include="PolySharp" Version="1.13.2" />
16+
17+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="2.2.6" />
1318
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="7.0.0" />
1419
<PackageVersion Include="System.Interactive.Async" Version="3.2.0"/>
1520

16-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="2.2.6" />
1721
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.6" />
18-
1922
<PackageVersion Include="Microsoft.Extensions.Logging" Version="5.0.0" />
2023
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="5.0.0" />
21-
2224
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.6" />
2325
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="2.2.4" />
2426
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />

NuGet/icon.png

18.6 KB
Loading

NuGet/linq2db.EntityFrameworkCore.nuspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<title>Linq to DB (linq2db) extensions for Entity Framework Core</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-2023 Igor Tkachev, Ilya Chudin, Svyatoslav Danyliv, Dmitry Lukashenko</copyright>
8+
<copyright>Copyright © 2020-2024 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>
@@ -15,7 +15,7 @@
1515
<license type="file">MIT-LICENSE.txt</license>
1616
<dependencies>
1717
<group targetFramework="netstandard2.0">
18-
<dependency id="linq2db" version="5.3.1" />
18+
<dependency id="linq2db" version="5.4.0" />
1919
<dependency id="Microsoft.EntityFrameworkCore.Relational" version="2.2.6" />
2020
<dependency id="Microsoft.Bcl.AsyncInterfaces" version="7.0.0" />
2121
<dependency id="System.Interactive.Async" version="3.2.0" />

Source/LinqToDB.EntityFrameworkCore/Compatibility/NullableAttributes.cs

-148
This file was deleted.

Source/LinqToDB.EntityFrameworkCore/EFCoreMetadataReader.cs

+16-14
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public EFCoreMetadataReader(IModel? model, IInfrastructure<IServiceProvider>? ac
4949
_annotationProvider = accessor.GetService<IMigrationsAnnotationProvider>();
5050
}
5151

52-
_objectId = $".{_model?.GetHashCode() ?? 0}.{_dependencies?.GetHashCode() ?? 0}.{_mappingSource?.GetHashCode() ?? 0}.{_annotationProvider?.GetHashCode() ?? 0}.";
52+
_objectId = FormattableString.Invariant($".{_model?.GetHashCode() ?? 0}.{_dependencies?.GetHashCode() ?? 0}.{_mappingSource?.GetHashCode() ?? 0}.{_annotationProvider?.GetHashCode() ?? 0}.");
5353
}
5454

5555
public MappingAttribute[] GetAttributes(Type type)
@@ -121,10 +121,10 @@ public MappingAttribute[] GetAttributes(Type type)
121121
// TableAttribute
122122
var tableAttribute = type.GetAttribute<System.ComponentModel.DataAnnotations.Schema.TableAttribute>();
123123
if (tableAttribute != null)
124-
(result ??= new()).Add(new TableAttribute(tableAttribute.Name) { Schema = tableAttribute.Schema });
124+
(result = new()).Add(new TableAttribute(tableAttribute.Name) { Schema = tableAttribute.Schema });
125125
}
126126

127-
return result == null ? Array.Empty<MappingAttribute>() : result.ToArray();
127+
return result == null ? [] : result.ToArray();
128128
}
129129

130130
static IEntityType GetBaseTypeRecursive(IEntityType entityType)
@@ -218,7 +218,7 @@ static DataType DbTypeToDataType(DbType dbType)
218218
public MappingAttribute[] GetAttributes(Type type, MemberInfo memberInfo)
219219
{
220220
if (typeof(Expression).IsSameOrParentOf(type))
221-
return Array.Empty<MappingAttribute>();
221+
return [];
222222

223223
List<MappingAttribute>? result = null;
224224
var hasColumn = false;
@@ -256,15 +256,15 @@ public MappingAttribute[] GetAttributes(Type type, MemberInfo memberInfo)
256256
var annotations = prop.GetAnnotations();
257257
if (_annotationProvider != null)
258258
{
259-
annotations = annotations.Concat(_annotationProvider.For(prop));
259+
annotations = annotations.Concat(_annotationProvider.For(prop)).ToArray();
260260
}
261261

262262
var isIdentity = annotations
263263
.Any(static a =>
264264
{
265265
if (a.Name.EndsWith(":ValueGenerationStrategy"))
266266
{
267-
var value = a.Value?.ToString();
267+
var value = a.Value == null ? null : FormattableString.Invariant($"{a.Value}");
268268

269269
if (value != null && (value.Contains("Identity") || value.Contains("Serial")))
270270
return true;
@@ -278,7 +278,9 @@ public MappingAttribute[] GetAttributes(Type type, MemberInfo memberInfo)
278278
{
279279
if (a.Value is string str)
280280
{
281-
return str.ToLowerInvariant().Contains("nextval");
281+
#pragma warning disable CA1862 // Use the 'StringComparison' method overloads to perform case-insensitive string comparisons
282+
return str.ToUpperInvariant().Contains("NEXTVAL");
283+
#pragma warning restore CA1862 // Use the 'StringComparison' method overloads to perform case-insensitive string comparisons
282284
}
283285
}
284286

@@ -437,7 +439,7 @@ public MappingAttribute[] GetAttributes(Type type, MemberInfo memberInfo)
437439
// });
438440
//}
439441

440-
return result == null ? Array.Empty<MappingAttribute>() : result.ToArray();
442+
return result == null ? [] : result.ToArray();
441443
}
442444

443445
sealed class ValueConverter : IValueConverter
@@ -587,7 +589,7 @@ string PrepareExpressionText(Expression? expr)
587589
}
588590

589591
if (idx >= 0)
590-
return $"{{{idx}}}";
592+
return FormattableString.Invariant($"{{{idx}}}");
591593

592594
if (expr is SqlFragmentExpression fragment)
593595
return fragment.Sql;
@@ -600,16 +602,16 @@ string PrepareExpressionText(Expression? expr)
600602

601603
if (!sqlFunction.IsNiladic)
602604
{
603-
text = text + "(";
605+
text += "(";
604606
for (var i = 0; i < sqlFunction.Arguments.Count; i++)
605607
{
606608
var paramText = PrepareExpressionText(sqlFunction.Arguments[i]);
607609
if (i > 0)
608-
text = text + ", ";
609-
text = text + paramText;
610+
text += ", ";
611+
text += paramText;
610612
}
611613

612-
text = text + ")";
614+
text += ")";
613615
}
614616

615617
return text;
@@ -659,7 +661,7 @@ private static Expression UnwrapConverted(Expression expr)
659661

660662
public MemberInfo[] GetDynamicColumns(Type type)
661663
{
662-
return Array.Empty<MemberInfo>();
664+
return [];
663665
}
664666

665667
string IMetadataReader.GetObjectID() => _objectId;

Source/LinqToDB.EntityFrameworkCore/Internal/EFCoreExpressionAttribute.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Globalization;
34
using System.Linq;
45
using System.Linq.Expressions;
56
using LinqToDB.Mapping;
@@ -10,7 +11,7 @@ namespace LinqToDB.EntityFrameworkCore.Internal
1011
/// <summary>
1112
/// Maps Linq To DB expression.
1213
/// </summary>
13-
public class EFCoreExpressionAttribute : Sql.ExpressionAttribute
14+
public sealed class EFCoreExpressionAttribute : Sql.ExpressionAttribute
1415
{
1516
/// <summary>
1617
/// Creates instance of expression mapper.
@@ -47,7 +48,7 @@ public EFCoreExpressionAttribute(string expression) : base(expression)
4748
_ = ResolveExpressionValues((context, parms, knownExpressions, converter), Expression!,
4849
static (ctx, v, d) =>
4950
{
50-
var idx = int.Parse(v);
51+
var idx = int.Parse(v, CultureInfo.InvariantCulture);
5152

5253
if (ctx.parms[idx] == null)
5354
ctx.parms[idx] = ctx.converter(ctx.context, ctx.knownExpressions[idx], null);

Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFTools.ContextExtensions.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,6 @@ public static async Task<BulkCopyRowsCopied> BulkCopyAsync<T>(
121121
if (context == null) throw new ArgumentNullException(nameof(context));
122122
if (source == null) throw new ArgumentNullException(nameof(source));
123123

124-
if (context == null) throw new ArgumentNullException(nameof(context));
125-
if (source == null) throw new ArgumentNullException(nameof(source));
126-
127124
using (var dc = context.CreateLinqToDBConnection())
128125
{
129126
return await dc.BulkCopyAsync(maxBatchSize, source, cancellationToken).ConfigureAwait(Common.Configuration.ContinueOnCapturedContext);
@@ -170,7 +167,9 @@ public static IValueInsertable<T> Into<T>(this DbContext context, ITable<T> targ
170167
if (context == null) throw new ArgumentNullException(nameof(context));
171168
if (target == null) throw new ArgumentNullException(nameof(target));
172169

170+
#pragma warning disable CA2000 // Dispose objects before losing scope
173171
return context.CreateLinqToDBConnection().Into(target);
172+
#pragma warning restore CA2000 // Dispose objects before losing scope
174173
}
175174

176175
#endregion
@@ -187,7 +186,9 @@ public static ITable<T> GetTable<T>(this DbContext context)
187186
{
188187
if (context == null) throw new ArgumentNullException(nameof(context));
189188

189+
#pragma warning disable CA2000 // Dispose objects before losing scope
190190
return context.CreateLinqToDBContext().GetTable<T>();
191+
#pragma warning restore CA2000 // Dispose objects before losing scope
191192
}
192193

193194
#endregion
@@ -217,7 +218,7 @@ public static ITable<T> GetTable<T>(this DbContext context)
217218
{
218219
if (contextOptions == null) throw new ArgumentNullException(nameof(contextOptions));
219220

220-
return contextOptions?.FindExtension<LinqToDBOptionsExtension>()?.Options;
221+
return contextOptions.FindExtension<LinqToDBOptionsExtension>()?.Options;
221222
}
222223

223224
#endregion

0 commit comments

Comments
 (0)