diff --git a/Build/linq2db.Default.props b/Build/linq2db.Default.props index f1f0b54..6973158 100644 --- a/Build/linq2db.Default.props +++ b/Build/linq2db.Default.props @@ -1,6 +1,6 @@  - 2.3.0 + 2.4.0 Svyatoslav Danyliv, Igor Tkachev, Dmitry Lukashenko, Ilya Chudin Linq to DB diff --git a/Directory.Packages.props b/Directory.Packages.props index f8cc33f..65dba56 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,10 +5,10 @@ - - + + - + diff --git a/NuGet/linq2db.EntityFrameworkCore.nuspec b/NuGet/linq2db.EntityFrameworkCore.nuspec index c080f60..133cc3d 100644 --- a/NuGet/linq2db.EntityFrameworkCore.nuspec +++ b/NuGet/linq2db.EntityFrameworkCore.nuspec @@ -16,7 +16,7 @@ - + diff --git a/Source/.editorconfig b/Source/.editorconfig new file mode 100644 index 0000000..4bd5af8 --- /dev/null +++ b/Source/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] +dotnet_diagnostic.CA1827.severity = error # CA1827: Do not use Count/LongCount when Any can be used +dotnet_diagnostic.CA2007.severity = error # CA2007: Do not directly await a Task +dotnet_diagnostic.CA1829.severity = error # CA1829: Use Length/Count property instead of Enumerable.Count method diff --git a/Source/LinqToDB.EntityFrameworkCore/Internal/EFCoreExpressionAttribute.cs b/Source/LinqToDB.EntityFrameworkCore/Internal/EFCoreExpressionAttribute.cs index 5653c4f..ba3ecc6 100644 --- a/Source/LinqToDB.EntityFrameworkCore/Internal/EFCoreExpressionAttribute.cs +++ b/Source/LinqToDB.EntityFrameworkCore/Internal/EFCoreExpressionAttribute.cs @@ -8,7 +8,7 @@ namespace LinqToDB.EntityFrameworkCore.Internal { /// - /// Maps linq2db exression. + /// Maps linq2db expression. /// public class EFCoreExpressionAttribute : Sql.ExpressionAttribute { @@ -20,12 +20,13 @@ public EFCoreExpressionAttribute(string expression) : base(expression) { } - /// - public override ISqlExpression GetExpression( + /// + public override ISqlExpression? GetExpression( + TContext context, IDataContext dataContext, SelectQuery query, Expression expression, - Func converter) + Func converter) { var knownExpressions = new List(); if (expression.NodeType == ExpressionType.Call) @@ -41,20 +42,20 @@ public override ISqlExpression GetExpression( knownExpressions.Add(me.Expression!); } - var pams = new List(knownExpressions.Select(_ => (ISqlExpression?) null)); + var parms = new List(knownExpressions.Select(_ => (ISqlExpression?) null)); - _ = Sql.ExtensionAttribute.ResolveExpressionValues(Expression!, - (v, d) => + _ = ResolveExpressionValues((context, parms, knownExpressions, converter), Expression!, + static (ctx, v, d) => { var idx = int.Parse(v); - if (pams[idx] == null) - pams[idx] = converter(knownExpressions[idx], null); + if (ctx.parms[idx] == null) + ctx.parms[idx] = ctx.converter(ctx.context, ctx.knownExpressions[idx], null); return v; }); - var parameters = pams.Select(p => p ?? new SqlExpression("!!!")).ToArray(); + var parameters = parms.Select(p => p ?? new SqlExpression("!!!")).ToArray(); return new SqlExpression(expression.Type, Expression!, Precedence, parameters); } } diff --git a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs index e7178c4..29b0b7e 100644 --- a/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs +++ b/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs @@ -1121,6 +1121,7 @@ public virtual void LogConnectionTrace(TraceInfo info, ILogger logger) _ => LogLevel.Trace, }; +#pragma warning disable CA1848 // Use the LoggerMessage delegates using var _ = logger.BeginScope("TraceInfoStep: {TraceInfoStep}, IsAsync: {IsAsync}", info.TraceInfoStep, info.IsAsync); switch (info.TraceInfoStep) @@ -1159,6 +1160,7 @@ public virtual void LogConnectionTrace(TraceInfo info, ILogger logger) break; } } +#pragma warning restore CA1848 // Use the LoggerMessage delegates } /// diff --git a/Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/ToolsTests.cs b/Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/ToolsTests.cs index 301e636..31d403c 100644 --- a/Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/ToolsTests.cs +++ b/Tests/LinqToDB.EntityFrameworkCore.SqlServer.Tests/ToolsTests.cs @@ -410,7 +410,9 @@ public async Task TestAsyncMethods([Values(true, false)] bool enableFilter) { using (var ctx = CreateContext(enableFilter)) { +#pragma warning disable CA1847 // Use char literal for a single character lookup var query = ctx.Products.AsQueryable().Where(p => p.ProductName.Contains("a")); +#pragma warning restore CA1847 // Use char literal for a single character lookup var expectedArray = await query.ToArrayAsync(); var expectedDictionary = await query.ToDictionaryAsync(p => p.ProductId); diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 74cf919..bb52020 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,8 +1,8 @@ variables: solution: 'linq2db.EFCore.sln' build_configuration: 'Release' - assemblyVersion: 2.3.0 - nugetVersion: 2.3.0 + assemblyVersion: 2.4.0 + nugetVersion: 2.4.0 artifact_nugets: 'nugets' # build on commits to important branches (master + release branches):