diff --git a/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs index 33b7d06e167..eb21110fa42 100644 --- a/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs @@ -36,16 +36,16 @@ public class CosmosQueryableMethodTranslatingExpressionVisitor : QueryableMethod /// public CosmosQueryableMethodTranslatingExpressionVisitor( [NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies, - [NotNull] IModel model, + [NotNull] QueryCompilationContext queryCompilationContext, [NotNull] ISqlExpressionFactory sqlExpressionFactory, [NotNull] IMemberTranslatorProvider memberTranslatorProvider, [NotNull] IMethodCallTranslatorProvider methodCallTranslatorProvider) : base(dependencies, subquery: false) { - _model = model; + _model = queryCompilationContext.Model; _sqlExpressionFactory = sqlExpressionFactory; _sqlTranslator = new CosmosSqlTranslatingExpressionVisitor( - model, + _model, sqlExpressionFactory, memberTranslatorProvider, methodCallTranslatorProvider); diff --git a/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitorFactory.cs index c3899e9fc4c..939e7c5ffa0 100644 --- a/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitorFactory.cs @@ -53,13 +53,13 @@ public CosmosQueryableMethodTranslatingExpressionVisitorFactory( /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// - public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model) + public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext) { - Check.NotNull(model, nameof(model)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); return new CosmosQueryableMethodTranslatingExpressionVisitor( _dependencies, - model, + queryCompilationContext, _sqlExpressionFactory, _memberTranslatorProvider, _methodCallTranslatorProvider); diff --git a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs index b9c275677e9..2d156674ce4 100644 --- a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs @@ -12,7 +12,6 @@ using Microsoft.EntityFrameworkCore.InMemory.Internal; using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Utilities; @@ -30,13 +29,13 @@ public class InMemoryQueryableMethodTranslatingExpressionVisitor : QueryableMeth public InMemoryQueryableMethodTranslatingExpressionVisitor( [NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies, - [NotNull] IModel model) + [NotNull] QueryCompilationContext queryCompilationContext) : base(dependencies, subquery: false) { - _expressionTranslator = new InMemoryExpressionTranslatingExpressionVisitor(this, model); + _expressionTranslator = new InMemoryExpressionTranslatingExpressionVisitor(this, queryCompilationContext.Model); _weakEntityExpandingExpressionVisitor = new WeakEntityExpandingExpressionVisitor(_expressionTranslator); _projectionBindingExpressionVisitor = new InMemoryProjectionBindingExpressionVisitor(this, _expressionTranslator); - _model = model; + _model = queryCompilationContext.Model; } protected InMemoryQueryableMethodTranslatingExpressionVisitor( diff --git a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitorFactory.cs index 694c33715c5..dc64e4700ef 100644 --- a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitorFactory.cs @@ -32,11 +32,11 @@ public InMemoryQueryableMethodTranslatingExpressionVisitorFactory( _dependencies = dependencies; } - public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model) + public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext) { - Check.NotNull(model, nameof(model)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); - return new InMemoryQueryableMethodTranslatingExpressionVisitor(_dependencies, model); + return new InMemoryQueryableMethodTranslatingExpressionVisitor(_dependencies, queryCompilationContext); } } } diff --git a/src/EFCore.Relational/Query/IRelationalSqlTranslatingExpressionVisitorFactory.cs b/src/EFCore.Relational/Query/IRelationalSqlTranslatingExpressionVisitorFactory.cs index 9d0bd4e62dd..668f06fce93 100644 --- a/src/EFCore.Relational/Query/IRelationalSqlTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.Relational/Query/IRelationalSqlTranslatingExpressionVisitorFactory.cs @@ -20,7 +20,7 @@ namespace Microsoft.EntityFrameworkCore.Query public interface IRelationalSqlTranslatingExpressionVisitorFactory { RelationalSqlTranslatingExpressionVisitor Create( - [NotNull] IModel model, + [NotNull] QueryCompilationContext queryCompilationContext, [NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor); } } diff --git a/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs b/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs index 16f13b70a9d..85cd0dfa026 100644 --- a/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs @@ -23,7 +23,6 @@ public class RelationalProjectionBindingExpressionVisitor : ExpressionVisitor private SelectExpression _selectExpression; private bool _clientEval; - private readonly IModel _model; private readonly IDictionary _projectionMapping = new Dictionary(); @@ -32,12 +31,10 @@ private readonly IDictionary _projectionMapping public RelationalProjectionBindingExpressionVisitor( [NotNull] RelationalQueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor, - [NotNull] RelationalSqlTranslatingExpressionVisitor sqlTranslatingExpressionVisitor, - [NotNull] IModel model) + [NotNull] RelationalSqlTranslatingExpressionVisitor sqlTranslatingExpressionVisitor) { _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor; _sqlTranslator = sqlTranslatingExpressionVisitor; - _model = model; } public virtual Expression Translate([NotNull] SelectExpression selectExpression, [NotNull] Expression expression) diff --git a/src/EFCore.Relational/Query/Internal/RelationalQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/EFCore.Relational/Query/Internal/RelationalQueryableMethodTranslatingExpressionVisitorFactory.cs index bb5708785e2..3bf7fe37bee 100644 --- a/src/EFCore.Relational/Query/Internal/RelationalQueryableMethodTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.Relational/Query/Internal/RelationalQueryableMethodTranslatingExpressionVisitorFactory.cs @@ -31,14 +31,14 @@ public RelationalQueryableMethodTranslatingExpressionVisitorFactory( _relationalDependencies = relationalDependencies; } - public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model) + public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext) { - Check.NotNull(model, nameof(model)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); return new RelationalQueryableMethodTranslatingExpressionVisitor( _dependencies, _relationalDependencies, - model); + queryCompilationContext); } } } diff --git a/src/EFCore.Relational/Query/Internal/RelationalSqlTranslatingExpressionVisitorFactory.cs b/src/EFCore.Relational/Query/Internal/RelationalSqlTranslatingExpressionVisitorFactory.cs index 0895a00638d..a7ec2f87917 100644 --- a/src/EFCore.Relational/Query/Internal/RelationalSqlTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.Relational/Query/Internal/RelationalSqlTranslatingExpressionVisitorFactory.cs @@ -18,15 +18,15 @@ public RelationalSqlTranslatingExpressionVisitorFactory( } public virtual RelationalSqlTranslatingExpressionVisitor Create( - IModel model, + QueryCompilationContext queryCompilationContext, QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor) { - Check.NotNull(model, nameof(model)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); Check.NotNull(queryableMethodTranslatingExpressionVisitor, nameof(queryableMethodTranslatingExpressionVisitor)); return new RelationalSqlTranslatingExpressionVisitor( _dependencies, - model, + queryCompilationContext, queryableMethodTranslatingExpressionVisitor); } } diff --git a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs index 1835fcf3f14..1146f9c6701 100644 --- a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs @@ -29,20 +29,20 @@ public class RelationalQueryableMethodTranslatingExpressionVisitor : QueryableMe public RelationalQueryableMethodTranslatingExpressionVisitor( [NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies, [NotNull] RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies, - [NotNull] IModel model) + [NotNull] QueryCompilationContext queryCompilationContext) : base(dependencies, subquery: false) { Check.NotNull(dependencies, nameof(dependencies)); Check.NotNull(relationalDependencies, nameof(relationalDependencies)); - Check.NotNull(model, nameof(model)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); RelationalDependencies = relationalDependencies; var sqlExpressionFactory = relationalDependencies.SqlExpressionFactory; - _sqlTranslator = relationalDependencies.RelationalSqlTranslatingExpressionVisitorFactory.Create(model, this); + _model = queryCompilationContext.Model; + _sqlTranslator = relationalDependencies.RelationalSqlTranslatingExpressionVisitorFactory.Create(queryCompilationContext, this); _weakEntityExpandingExpressionVisitor = new WeakEntityExpandingExpressionVisitor(_sqlTranslator, sqlExpressionFactory); - _projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator, model); - _model = model; + _projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator); _sqlExpressionFactory = sqlExpressionFactory; _subquery = false; } @@ -57,7 +57,7 @@ protected RelationalQueryableMethodTranslatingExpressionVisitor( _model = parentVisitor._model; _sqlTranslator = parentVisitor._sqlTranslator; _weakEntityExpandingExpressionVisitor = parentVisitor._weakEntityExpandingExpressionVisitor; - _projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator, _model); + _projectionBindingExpressionVisitor = new RelationalProjectionBindingExpressionVisitor(this, _sqlTranslator); _sqlExpressionFactory = parentVisitor._sqlExpressionFactory; _subquery = true; } diff --git a/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs b/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs index 27ceec111ef..a4fc233a699 100644 --- a/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs @@ -9,7 +9,6 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Query.Internal; using Microsoft.EntityFrameworkCore.Query.SqlExpressions; @@ -27,17 +26,17 @@ public class RelationalSqlTranslatingExpressionVisitor : ExpressionVisitor public RelationalSqlTranslatingExpressionVisitor( [NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies, - [NotNull] IModel model, + [NotNull] QueryCompilationContext queryCompilationContext, [NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor) { Check.NotNull(dependencies, nameof(dependencies)); - Check.NotNull(model, nameof(model)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); Check.NotNull(queryableMethodTranslatingExpressionVisitor, nameof(queryableMethodTranslatingExpressionVisitor)); Dependencies = dependencies; SqlExpressionFactory = dependencies.SqlExpressionFactory; - _model = model; + _model = queryCompilationContext.Model; _queryableMethodTranslatingExpressionVisitor = queryableMethodTranslatingExpressionVisitor; _sqlTypeMappingVerifyingExpressionVisitor = new SqlTypeMappingVerifyingExpressionVisitor(); } diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitor.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitor.cs index 73abfee5e3a..36a4cc663dc 100644 --- a/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitor.cs +++ b/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitor.cs @@ -35,9 +35,9 @@ private static readonly HashSet _arithmeticOperatorTypes public SqlServerSqlTranslatingExpressionVisitor( [NotNull] RelationalSqlTranslatingExpressionVisitorDependencies dependencies, - [NotNull] IModel model, + [NotNull] QueryCompilationContext queryCompilationContext, [NotNull] QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor) - : base(dependencies, model, queryableMethodTranslatingExpressionVisitor) + : base(dependencies, queryCompilationContext, queryableMethodTranslatingExpressionVisitor) { } diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitorFactory.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitorFactory.cs index 9792e0439e8..51643618f46 100644 --- a/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.SqlServer/Query/Internal/SqlServerSqlTranslatingExpressionVisitorFactory.cs @@ -18,11 +18,11 @@ public SqlServerSqlTranslatingExpressionVisitorFactory( } public virtual RelationalSqlTranslatingExpressionVisitor Create( - IModel model, + QueryCompilationContext queryCompilationContext, QueryableMethodTranslatingExpressionVisitor queryableMethodTranslatingExpressionVisitor) => new SqlServerSqlTranslatingExpressionVisitor( _dependencies, - model, + queryCompilationContext, queryableMethodTranslatingExpressionVisitor); } } diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs index 9149257723a..62760b40bc7 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs @@ -19,8 +19,8 @@ public class SqliteQueryableMethodTranslatingExpressionVisitor : RelationalQuery public SqliteQueryableMethodTranslatingExpressionVisitor( [NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies, [NotNull] RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies, - [NotNull] IModel model) - : base(dependencies, relationalDependencies, model) + [NotNull] QueryCompilationContext queryCompilationContext) + : base(dependencies, relationalDependencies, queryCompilationContext) { } diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitorFactory.cs index 2a4e3071c0f..524b96bcaa5 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitorFactory.cs @@ -21,11 +21,11 @@ public SqliteQueryableMethodTranslatingExpressionVisitorFactory( _relationalDependencies = relationalDependencies; } - public virtual QueryableMethodTranslatingExpressionVisitor Create(IModel model) + public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext) { - Check.NotNull(model, nameof(model)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); - return new SqliteQueryableMethodTranslatingExpressionVisitor(_dependencies, _relationalDependencies, model); + return new SqliteQueryableMethodTranslatingExpressionVisitor(_dependencies, _relationalDependencies, queryCompilationContext); } } } diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs index 4a1a253afc8..56f8fdf6d4e 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteSqlTranslatingExpressionVisitor.cs @@ -80,9 +80,9 @@ private static readonly IReadOnlyDictionary new SqliteSqlTranslatingExpressionVisitor( _dependencies, - model, + queryCompilationContext, queryableMethodTranslatingExpressionVisitor); } } diff --git a/src/EFCore/Query/IQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/EFCore/Query/IQueryableMethodTranslatingExpressionVisitorFactory.cs index b45e36ed189..2f0f41efca7 100644 --- a/src/EFCore/Query/IQueryableMethodTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore/Query/IQueryableMethodTranslatingExpressionVisitorFactory.cs @@ -19,6 +19,6 @@ namespace Microsoft.EntityFrameworkCore.Query /// public interface IQueryableMethodTranslatingExpressionVisitorFactory { - QueryableMethodTranslatingExpressionVisitor Create([NotNull] IModel model); + QueryableMethodTranslatingExpressionVisitor Create([NotNull] QueryCompilationContext queryCompilationContext); } } diff --git a/src/EFCore/Query/QueryCompilationContext.cs b/src/EFCore/Query/QueryCompilationContext.cs index 1b2b15a54c1..5d9a41c02ce 100644 --- a/src/EFCore/Query/QueryCompilationContext.cs +++ b/src/EFCore/Query/QueryCompilationContext.cs @@ -73,7 +73,7 @@ public virtual Func CreateQueryExecutor([NotNull query = _queryTranslationPreprocessorFactory.Create(this).Process(query); // Convert EntityQueryable to ShapedQueryExpression - query = _queryableMethodTranslatingExpressionVisitorFactory.Create(Model).Visit(query); + query = _queryableMethodTranslatingExpressionVisitorFactory.Create(this).Visit(query); query = _queryTranslationPostprocessorFactory.Create(this).Process(query); // Inject actual entity materializer