diff --git a/src/EFCore.Relational/Query/Internal/QueryableJsonProjectionInfo.cs b/src/EFCore.Relational/Query/Internal/QueryableJsonProjectionInfo.cs new file mode 100644 index 00000000000..12b168b43c3 --- /dev/null +++ b/src/EFCore.Relational/Query/Internal/QueryableJsonProjectionInfo.cs @@ -0,0 +1,51 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Internal; + +/// +/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to +/// the same compatibility standards as public APIs. It may be changed or removed without notice in +/// 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 readonly struct QueryableJsonProjectionInfo +{ + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// 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 QueryableJsonProjectionInfo( + Dictionary propertyIndexMap, + List<(JsonProjectionInfo, INavigation)> childrenProjectionInfo) + { + PropertyIndexMap = propertyIndexMap; + ChildrenProjectionInfo = childrenProjectionInfo; + } + + /// + /// Map between entity properties and corresponding column indexes. + /// + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// 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 IDictionary PropertyIndexMap { get; } + + /// + /// Information needed to construct each child JSON entity. + /// - JsonProjection info (same one we use for simple JSON projection), + /// - navigation between parent and the child JSON entity. + /// + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// 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 IList<(JsonProjectionInfo JsonProjectionInfo, INavigation Navigation)> ChildrenProjectionInfo { get; } +} diff --git a/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs b/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs index 8d250d96c18..29b4c1cab2f 100644 --- a/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs @@ -433,7 +433,11 @@ protected override Expression VisitBinary(BinaryExpression binaryExpression) if (newExpression.Arguments[0] is ProjectionBindingExpression projectionBindingExpression) { - var propertyMap = (IDictionary)GetProjectionIndex(projectionBindingExpression); + var projectionIndex = GetProjectionIndex(projectionBindingExpression); + var propertyMap = projectionIndex is IDictionary + ? (IDictionary)projectionIndex + : ((QueryableJsonProjectionInfo)projectionIndex).PropertyIndexMap; + _materializationContextBindings[parameterExpression] = propertyMap; _entityTypeIdentifyingExpressionInfo[parameterExpression] = // If single entity type is being selected in hierarchy then we use the value directly else we store the offset @@ -535,6 +539,50 @@ protected override Expression VisitExtension(Expression extensionExpression) visitedShaperResultParameter, shaper.Type); } + else if (GetProjectionIndex(projectionBindingExpression) is QueryableJsonProjectionInfo queryableJsonEntityProjectionInfo) + { + if (_isTracking) + { + throw new InvalidOperationException( + RelationalStrings.JsonEntityOrCollectionProjectedAtRootLevelInTrackingQuery(nameof(EntityFrameworkQueryableExtensions.AsNoTracking))); + } + + // json entity converted to query root and projected + var entityParameter = Parameter(shaper.Type); + _variables.Add(entityParameter); + var entityMaterializationExpression = (BlockExpression)_parentVisitor.InjectEntityMaterializers(shaper); + + var mappedProperties = queryableJsonEntityProjectionInfo.PropertyIndexMap.Keys.ToList(); + var rewrittenEntityMaterializationExpression = new QueryableJsonEntityMaterializerRewriter(mappedProperties) + .Rewrite(entityMaterializationExpression); + + var visitedEntityMaterializationExpression = Visit(rewrittenEntityMaterializationExpression); + _expressions.Add(Assign(entityParameter, visitedEntityMaterializationExpression)); + + foreach (var childProjectionInfo in queryableJsonEntityProjectionInfo.ChildrenProjectionInfo) + { + var (jsonReaderDataVariable, keyValuesParameter) = JsonShapingPreProcess( + childProjectionInfo.JsonProjectionInfo, + childProjectionInfo.Navigation.TargetEntityType, + childProjectionInfo.Navigation.IsCollection); + + var shaperResult = CreateJsonShapers( + childProjectionInfo.Navigation.TargetEntityType, + nullable: true, + jsonReaderDataVariable, + keyValuesParameter, + parentEntityExpression: entityParameter, + navigation: childProjectionInfo.Navigation); + + var visitedShaperResult = Visit(shaperResult); + + _includeExpressions.Add(visitedShaperResult); + } + + accessor = CompensateForCollectionMaterialization( + entityParameter, + shaper.Type); + } else { var entityParameter = Parameter(shaper.Type); @@ -2141,6 +2189,62 @@ ParameterExpression ExtractAndCacheNonConstantJsonArrayElementAccessValue(int in } } + private sealed class QueryableJsonEntityMaterializerRewriter : ExpressionVisitor + { + private readonly List _mappedProperties; + + public QueryableJsonEntityMaterializerRewriter(List mappedProperties) + { + _mappedProperties = mappedProperties; + } + + public BlockExpression Rewrite(BlockExpression jsonEntityShaperMaterializer) + => (BlockExpression)VisitBlock(jsonEntityShaperMaterializer); + + protected override Expression VisitBinary(BinaryExpression binaryExpression) + { + // here we try to pattern match part of the shaper code that checks if key values are null + // if they are all non-null then we generate the entity + // problem for JSON entities is that some of the keys are synthesized and should be omitted + // if the key is one of the mapped ones, we leave the expression as is, otherwise replace with Constant(true) + // i.e. removing it + if (binaryExpression is + { + NodeType: ExpressionType.NotEqual, + Left: MethodCallExpression + { + Method: { IsGenericMethod: true } method, + Arguments: [_, _, ConstantExpression { Value: IProperty property }] + }, + Right: ConstantExpression { Value: null } + } + && method.GetGenericMethodDefinition() == Infrastructure.ExpressionExtensions.ValueBufferTryReadValueMethod) + { + return _mappedProperties.Contains(property) + ? binaryExpression + : Constant(true); + } + + return base.VisitBinary(binaryExpression); + } + + protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression) + { + if (methodCallExpression is + { + Method: { IsGenericMethod: true } method, + Arguments: [_, _, ConstantExpression { Value: IProperty property }] + } + && method.GetGenericMethodDefinition() == Infrastructure.ExpressionExtensions.ValueBufferTryReadValueMethod + && !_mappedProperties.Contains(property)) + { + return Default(methodCallExpression.Type); + } + + return base.VisitMethodCall(methodCallExpression); + } + } + private static LambdaExpression GenerateFixup( Type entityType, Type relatedEntityType, diff --git a/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs b/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs index 856a485ec2a..9ff0b64c9e8 100644 --- a/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs +++ b/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs @@ -807,7 +807,9 @@ when entityType.IsMappedToJson(): // For JSON entities, the identifier is the key that was generated when we convert from json to query root // (OPENJSON, json_each, etc), but we can't use it for distinct, as it would warp the results. // Instead, we will treat every non-key property as identifier. - foreach (var property in entityType.GetDeclaredProperties().Where(p => !p.IsPrimaryKey())) + + // TODO: hack/workaround, see #31398 + foreach (var property in entityType.GetDeclaredProperties().Where(p => !p.IsPrimaryKey() && p.GetRelationalTypeMapping().ElementTypeMapping == null)) { typeProjectionIdentifiers.Add(entityProjection.BindProperty(property)); typeProjectionValueComparers.Add(property.GetKeyValueComparer()); @@ -823,7 +825,9 @@ when entityType.IsMappedToJson(): // We know that there are existing identifiers (see condition above); we know we must have a key since a keyless // entity type would have wiped the identifiers when generating the join. Check.DebugAssert(primaryKey != null, "primary key is null."); - foreach (var property in primaryKey.Properties) + + // TODO: hack/workaround, see #31398 + foreach (var property in primaryKey.Properties.Where(x => x.GetRelationalTypeMapping().ElementTypeMapping == null)) { typeProjectionIdentifiers.Add(entityProjection.BindProperty(property)); typeProjectionValueComparers.Add(property.GetKeyValueComparer()); @@ -1297,15 +1301,7 @@ static void UpdateLimit(SelectExpression selectExpression) case JsonQueryExpression jsonQueryExpression: { - var jsonProjectionResult = AddJsonProjection( - jsonQueryExpression, - jsonScalarToAdd: new JsonScalarExpression( - jsonQueryExpression.JsonColumn, - jsonQueryExpression.Path, - jsonQueryExpression.JsonColumn.Type, - jsonQueryExpression.JsonColumn.TypeMapping!, - jsonQueryExpression.IsNullable)); - + var jsonProjectionResult = AddJsonProjection(jsonQueryExpression); newClientProjections.Add(jsonProjectionResult); clientProjectionIndexMap.Add(newClientProjections.Count - 1); @@ -1765,6 +1761,33 @@ Expression CopyProjectionToOuter(SelectExpression innerSelectExpression, Express projectionIndexMap[jsonProjectionInfo.JsonColumnIndex], newKeyAccessInfo)); } + else if (constantValue is QueryableJsonProjectionInfo queryableJsonProjectionInfo) + { + var newPropertyIndexMap = new Dictionary(queryableJsonProjectionInfo.PropertyIndexMap.Count); + foreach (var (property, value) in queryableJsonProjectionInfo.PropertyIndexMap) + { + newPropertyIndexMap[property] = projectionIndexMap[value]; + } + + var newChildrenProjectionInfo = new List<(JsonProjectionInfo, INavigation)>(); + foreach (var childProjectionInfo in queryableJsonProjectionInfo.ChildrenProjectionInfo) + { + var newKeyAccessInfo = new List<(IProperty?, int?, int?)>(); + foreach (var (keyProperty, constantKeyValue, keyProjectionIndex) in childProjectionInfo.JsonProjectionInfo.KeyAccessInfo) + { + newKeyAccessInfo.Add((keyProperty, constantKeyValue, keyProjectionIndex != null ? projectionIndexMap[keyProjectionIndex.Value] : null)); + } + + newChildrenProjectionInfo.Add( + (new JsonProjectionInfo( + projectionIndexMap[childProjectionInfo.JsonProjectionInfo.JsonColumnIndex], + newKeyAccessInfo), + childProjectionInfo.Navigation)); + } + + remappedConstant = Constant( + new QueryableJsonProjectionInfo(newPropertyIndexMap, newChildrenProjectionInfo)); + } else { remappedConstant = Constant(projectionIndexMap[(int)constantValue]); @@ -1792,14 +1815,7 @@ Expression CopyProjectionToOuter(SelectExpression innerSelectExpression, Express result[projectionMember] = expression switch { StructuralTypeProjectionExpression projection => AddStructuralTypeProjection(projection), - JsonQueryExpression jsonQueryExpression => AddJsonProjection( - jsonQueryExpression, - new JsonScalarExpression( - jsonQueryExpression.JsonColumn, - jsonQueryExpression.Path, - jsonQueryExpression.JsonColumn.Type, - jsonQueryExpression.JsonColumn.TypeMapping!, - jsonQueryExpression.IsNullable)), + JsonQueryExpression jsonQueryExpression => AddJsonProjection(jsonQueryExpression), _ => Constant(AddToProjection((SqlExpression)expression, projectionMember.Last?.Name)) }; } @@ -1817,41 +1833,90 @@ ConstantExpression AddStructuralTypeProjection(StructuralTypeProjectionExpressio throw new InvalidOperationException(RelationalStrings.CannotProjectNullableComplexType(complexType.DisplayName())); } - var projections = new Dictionary(); + // JSON entity that had some query operations applied on it - it has been converted to a query root via OPENJSON/json_each + // so it requires different materialization path than regular entity + // e.g. we need to also add all the child navigations, JSON entity builds all the includes as part of it's own materializer + // rather than relying on IncludeExpressions in the shaper query + // also, we don't want to add projection map for synthesized keys, whereas regular entity needs to project every single property it has + if (projection is { StructuralType: IEntityType entityType } + && entityType.IsMappedToJson()) + { + var propertyIndexMap = new Dictionary(); + var ownerEntity = entityType; - ProcessType(projection); + do + { + var ownership = ownerEntity.FindOwnership(); + if (ownership != null) + { + ownerEntity = ownership.PrincipalEntityType; + } + } + while (ownerEntity.IsMappedToJson()); + + var keyPropertyCount = ownerEntity.FindPrimaryKey()!.Properties.Count; + foreach (var property in entityType.FindPrimaryKey()!.Properties.Take(keyPropertyCount) + .Concat(entityType.GetDeclaredProperties().Where(p => p.GetJsonPropertyName() is not null))) + { + propertyIndexMap[property] = AddToProjection(projection.BindProperty(property), null); + } + + var childrenProjectionInfo = new List<(JsonProjectionInfo, INavigation)>(); + foreach (var ownedNavigation in entityType.GetNavigations().Where( + n => n.TargetEntityType.IsMappedToJson() && n.ForeignKey.IsOwnership && n == n.ForeignKey.PrincipalToDependent)) + { + var jsonQueryExpression = (JsonQueryExpression)projection.BindNavigation(ownedNavigation)!.ValueBufferExpression; + var jsonProjectionInfo = (JsonProjectionInfo)AddJsonProjection(jsonQueryExpression).Value!; + childrenProjectionInfo.Add((jsonProjectionInfo, ownedNavigation)); + } - void ProcessType(StructuralTypeProjectionExpression typeProjection) + return Constant(new QueryableJsonProjectionInfo(propertyIndexMap, childrenProjectionInfo)); + } + else { - foreach (var property in GetAllPropertiesInHierarchy(typeProjection.StructuralType)) + var projections = new Dictionary(); + + ProcessType(projection); + + void ProcessType(StructuralTypeProjectionExpression typeProjection) { - if (typeProjection is { StructuralType: IEntityType entityType } - && entityType.IsMappedToJson() - && property.IsOrdinalKeyProperty()) + foreach (var property in GetAllPropertiesInHierarchy(typeProjection.StructuralType)) { - continue; + if (typeProjection is { StructuralType: IEntityType entityType } + && entityType.IsMappedToJson() + && property.IsOrdinalKeyProperty()) + { + continue; + } + + projections[property] = AddToProjection(typeProjection.BindProperty(property), alias: null); } - projections[property] = AddToProjection(typeProjection.BindProperty(property), alias: null); + foreach (var complexProperty in GetAllComplexPropertiesInHierarchy(typeProjection.StructuralType)) + { + ProcessType((StructuralTypeProjectionExpression)typeProjection.BindComplexProperty(complexProperty).ValueBufferExpression); + } } - foreach (var complexProperty in GetAllComplexPropertiesInHierarchy(typeProjection.StructuralType)) + if (projection.DiscriminatorExpression is not null) { - ProcessType((StructuralTypeProjectionExpression)typeProjection.BindComplexProperty(complexProperty).ValueBufferExpression); + AddToProjection(projection.DiscriminatorExpression, DiscriminatorColumnAlias); } - } - if (projection.DiscriminatorExpression is not null) - { - AddToProjection(projection.DiscriminatorExpression, DiscriminatorColumnAlias); + return Constant(projections); } - - return Constant(projections); } - ConstantExpression AddJsonProjection(JsonQueryExpression jsonQueryExpression, JsonScalarExpression jsonScalarToAdd) + ConstantExpression AddJsonProjection(JsonQueryExpression jsonQueryExpression) { - var sqlExpression = AssignUniqueAliases(jsonScalarToAdd); + var jsonScalarExpression = new JsonScalarExpression( + jsonQueryExpression.JsonColumn, + jsonQueryExpression.Path, + jsonQueryExpression.JsonColumn.Type, + jsonQueryExpression.JsonColumn.TypeMapping!, + jsonQueryExpression.IsNullable); + + var sqlExpression = AssignUniqueAliases(jsonScalarExpression); _projection.Add(new ProjectionExpression(sqlExpression, "")); var jsonColumnIndex = _projection.Count - 1; var keyAccessInfo = new List<(IProperty?, int?, int?)>(); @@ -1862,7 +1927,7 @@ ConstantExpression AddJsonProjection(JsonQueryExpression jsonQueryExpression, Js keyAccessInfo.Add((keyProperty, null, AddToProjection(keyColumn))); } - foreach (var elementAccessSegment in jsonScalarToAdd.Path.Where(x => x.ArrayIndex != null)) + foreach (var elementAccessSegment in jsonScalarExpression.Path.Where(x => x.ArrayIndex != null)) { if (elementAccessSegment.ArrayIndex is SqlConstantExpression { Value: int intValue }) { diff --git a/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteDbContextOptionsBuilderExtensions.cs b/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteDbContextOptionsBuilderExtensions.cs index 5374f027ef4..2d16c843968 100644 --- a/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteDbContextOptionsBuilderExtensions.cs +++ b/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteDbContextOptionsBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Spatial data, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerNetTopologySuiteDbContextOptionsBuilderExtensions diff --git a/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteServiceCollectionExtensions.cs b/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteServiceCollectionExtensions.cs index eed9924ec79..2dcf2a7b4e1 100644 --- a/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteServiceCollectionExtensions.cs +++ b/src/EFCore.SqlServer.NTS/Extensions/SqlServerNetTopologySuiteServiceCollectionExtensions.cs @@ -14,7 +14,7 @@ namespace Microsoft.Extensions.DependencyInjection; /// /// /// See Spatial data, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerNetTopologySuiteServiceCollectionExtensions diff --git a/src/EFCore.SqlServer/Diagnostics/ConflictingValueGenerationStrategiesEventData.cs b/src/EFCore.SqlServer/Diagnostics/ConflictingValueGenerationStrategiesEventData.cs index 5e3790bbc7b..689afa66ef5 100644 --- a/src/EFCore.SqlServer/Diagnostics/ConflictingValueGenerationStrategiesEventData.cs +++ b/src/EFCore.SqlServer/Diagnostics/ConflictingValueGenerationStrategiesEventData.cs @@ -9,7 +9,7 @@ namespace Microsoft.EntityFrameworkCore.Diagnostics; /// /// /// See Logging, events, and diagnostics, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class ConflictingValueGenerationStrategiesEventData : EventData diff --git a/src/EFCore.SqlServer/Diagnostics/SqlServerEventId.cs b/src/EFCore.SqlServer/Diagnostics/SqlServerEventId.cs index a952d93627d..2fd40c196ef 100644 --- a/src/EFCore.SqlServer/Diagnostics/SqlServerEventId.cs +++ b/src/EFCore.SqlServer/Diagnostics/SqlServerEventId.cs @@ -14,7 +14,7 @@ namespace Microsoft.EntityFrameworkCore.Diagnostics; /// /// /// See Logging, events, and diagnostics, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// diff --git a/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePrimitiveCollectionBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePrimitiveCollectionBuilderExtensions.cs index afd29bd2087..c4747993ba7 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePrimitiveCollectionBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePrimitiveCollectionBuilderExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerComplexTypePrimitiveCollectionBuilderExtensions @@ -18,7 +18,7 @@ public static class SqlServerComplexTypePrimitiveCollectionBuilderExtensions /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. @@ -38,7 +38,7 @@ public static ComplexTypePrimitiveCollectionBuilder IsSparse(this ComplexTypePri /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePropertyBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePropertyBuilderExtensions.cs index 3e55e93207a..bb624ebc71d 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePropertyBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerComplexTypePropertyBuilderExtensions.cs @@ -9,7 +9,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerComplexTypePropertyBuilderExtensions @@ -20,7 +20,7 @@ public static class SqlServerComplexTypePropertyBuilderExtensions /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -61,7 +61,7 @@ public static ComplexTypePropertyBuilder UseHiLo( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -81,7 +81,7 @@ public static ComplexTypePropertyBuilder UseHiLo( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -115,7 +115,7 @@ public static ComplexTypePropertyBuilder UseSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -135,7 +135,7 @@ public static ComplexTypePropertyBuilder UseSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -165,7 +165,7 @@ public static ComplexTypePropertyBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -184,7 +184,7 @@ public static ComplexTypePropertyBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -204,7 +204,7 @@ public static ComplexTypePropertyBuilder UseIdentityColumn /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -223,7 +223,7 @@ public static ComplexTypePropertyBuilder UseIdentityColumn /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. @@ -243,7 +243,7 @@ public static ComplexTypePropertyBuilder IsSparse(this ComplexTypePropertyBuilde /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerDatabaseFacadeExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerDatabaseFacadeExtensions.cs index 3b9ba661860..d623ef40586 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerDatabaseFacadeExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerDatabaseFacadeExtensions.cs @@ -22,7 +22,7 @@ public static class SqlServerDatabaseFacadeExtensions /// provider to use as part of configuring the context. /// /// - /// See Accessing SQL Server and SQL Azure databases with EF Core + /// See Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// diff --git a/src/EFCore.SqlServer/Extensions/SqlServerDbContextOptionsBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerDbContextOptionsBuilderExtensions.cs index a2783180b9c..8ab8663f40f 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerDbContextOptionsBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerDbContextOptionsBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Using DbContextOptions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerDbContextOptionsExtensions @@ -28,7 +28,7 @@ public static class SqlServerDbContextOptionsExtensions /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -49,7 +49,7 @@ public static DbContextOptionsBuilder UseSqlServer( /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder being used to configure the context. @@ -73,7 +73,7 @@ public static DbContextOptionsBuilder UseSqlServer( /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder being used to configure the context. @@ -97,7 +97,7 @@ public static DbContextOptionsBuilder UseSqlServer( /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder being used to configure the context. @@ -139,7 +139,7 @@ public static DbContextOptionsBuilder UseSqlServer( /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -158,7 +158,7 @@ public static DbContextOptionsBuilder UseSqlServer( /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of context to be configured. @@ -180,7 +180,7 @@ public static DbContextOptionsBuilder UseSqlServer( /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of context to be configured. @@ -207,7 +207,7 @@ public static DbContextOptionsBuilder UseSqlServer( /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of context to be configured. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerDbFunctionsExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerDbFunctionsExtensions.cs index 6180a64a702..9854fd86dde 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerDbFunctionsExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerDbFunctionsExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Database functions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerDbFunctionsExtensions @@ -23,7 +23,7 @@ public static class SqlServerDbFunctionsExtensions /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -42,7 +42,7 @@ public static bool FreeText( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -59,7 +59,7 @@ public static bool FreeText( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -78,7 +78,7 @@ public static bool Contains( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -100,7 +100,7 @@ public static bool Contains( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -119,7 +119,7 @@ public static int DateDiffYear( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -138,7 +138,7 @@ public static int DateDiffYear( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -157,7 +157,7 @@ public static int DateDiffYear( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -176,7 +176,7 @@ public static int DateDiffYear( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -195,7 +195,7 @@ public static int DateDiffYear( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -218,7 +218,7 @@ public static int DateDiffYear( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -237,7 +237,7 @@ public static int DateDiffMonth( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -256,7 +256,7 @@ public static int DateDiffMonth( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -275,7 +275,7 @@ public static int DateDiffMonth( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -294,7 +294,7 @@ public static int DateDiffMonth( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -313,7 +313,7 @@ public static int DateDiffMonth( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -336,7 +336,7 @@ public static int DateDiffMonth( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -355,7 +355,7 @@ public static int DateDiffDay( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -374,7 +374,7 @@ public static int DateDiffDay( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -393,7 +393,7 @@ public static int DateDiffDay( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -412,7 +412,7 @@ public static int DateDiffDay( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -431,7 +431,7 @@ public static int DateDiffDay( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -454,7 +454,7 @@ public static int DateDiffDay( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -473,7 +473,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -492,7 +492,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -511,7 +511,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -530,7 +530,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -549,7 +549,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -568,7 +568,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -587,7 +587,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -606,7 +606,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -625,7 +625,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -648,7 +648,7 @@ public static int DateDiffHour( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -667,7 +667,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -686,7 +686,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -705,7 +705,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -724,7 +724,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -743,7 +743,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -762,7 +762,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -781,7 +781,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -800,7 +800,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -819,7 +819,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -842,7 +842,7 @@ public static int DateDiffMinute( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -861,7 +861,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -880,7 +880,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -899,7 +899,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -918,7 +918,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -937,7 +937,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -956,7 +956,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -975,7 +975,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -994,7 +994,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1013,7 +1013,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1036,7 +1036,7 @@ public static int DateDiffSecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1055,7 +1055,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1074,7 +1074,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1093,7 +1093,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1112,7 +1112,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1131,7 +1131,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1150,7 +1150,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1169,7 +1169,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1188,7 +1188,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1207,7 +1207,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1230,7 +1230,7 @@ public static int DateDiffMillisecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1249,7 +1249,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1268,7 +1268,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1287,7 +1287,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1306,7 +1306,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1325,7 +1325,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1344,7 +1344,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1363,7 +1363,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1382,7 +1382,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1401,7 +1401,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1424,7 +1424,7 @@ public static int DateDiffMicrosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1443,7 +1443,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1462,7 +1462,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1481,7 +1481,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1500,7 +1500,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1519,7 +1519,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1538,7 +1538,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1557,7 +1557,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1576,7 +1576,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1595,7 +1595,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1618,7 +1618,7 @@ public static int DateDiffNanosecond( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1637,7 +1637,7 @@ public static int DateDiffWeek( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1656,7 +1656,7 @@ public static int DateDiffWeek( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1675,7 +1675,7 @@ public static int DateDiffWeek( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1694,7 +1694,7 @@ public static int DateDiffWeek( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1713,7 +1713,7 @@ public static int DateDiffWeek( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1734,7 +1734,7 @@ public static int DateDiffWeek( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1752,7 +1752,7 @@ public static bool IsDate( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1784,7 +1784,7 @@ public static DateTime DateTimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1806,7 +1806,7 @@ public static DateTime DateFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1846,7 +1846,7 @@ public static DateTime DateTime2FromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1884,7 +1884,7 @@ public static DateTimeOffset DateTimeOffsetFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1909,7 +1909,7 @@ public static DateTime SmallDateTimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1935,7 +1935,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1951,7 +1951,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1967,7 +1967,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1983,7 +1983,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -1999,7 +1999,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -2015,7 +2015,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -2031,7 +2031,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -2047,7 +2047,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -2063,7 +2063,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -2080,7 +2080,7 @@ public static TimeSpan TimeFromParts( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. @@ -2102,7 +2102,7 @@ public static bool IsNumeric( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -2123,7 +2123,7 @@ public static DateTimeOffset AtTimeZone( /// /// /// See Database functions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The instance. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeBuilderExtensions.cs index 30c00ffcbb6..c5ce3eac1fc 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerEntityTypeBuilderExtensions diff --git a/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeExtensions.cs index f0e15f9f2a3..1f69486cb80 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerEntityTypeExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerEntityTypeExtensions diff --git a/src/EFCore.SqlServer/Extensions/SqlServerIndexBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerIndexBuilderExtensions.cs index 4d5e3de65db..d0ef0e19227 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerIndexBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerIndexBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerIndexBuilderExtensions @@ -21,7 +21,7 @@ public static class SqlServerIndexBuilderExtensions /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -39,7 +39,7 @@ public static IndexBuilder IsClustered(this IndexBuilder indexBuilder, bool clus /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -55,7 +55,7 @@ public static IndexBuilder IsClustered( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -84,7 +84,7 @@ public static IndexBuilder IsClustered( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -102,7 +102,7 @@ public static bool CanSetIsClustered( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -122,7 +122,7 @@ public static IndexBuilder IncludeProperties(this IndexBuilder indexBuilder, par /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -144,7 +144,7 @@ public static IndexBuilder IncludeProperties( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -177,7 +177,7 @@ public static IndexBuilder IncludeProperties( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -207,7 +207,7 @@ public static IndexBuilder IncludeProperties( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -229,7 +229,7 @@ public static bool CanSetIncludeProperties( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -247,7 +247,7 @@ public static IndexBuilder IsCreatedOnline(this IndexBuilder indexBuilder, bool /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -263,7 +263,7 @@ public static IndexBuilder IsCreatedOnline( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -293,7 +293,7 @@ public static IndexBuilder IsCreatedOnline( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -315,7 +315,7 @@ public static bool CanSetIsCreatedOnline( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -333,7 +333,7 @@ public static IndexBuilder HasFillFactor(this IndexBuilder indexBuilder, int fil /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -349,7 +349,7 @@ public static IndexBuilder HasFillFactor( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. @@ -379,7 +379,7 @@ public static IndexBuilder HasFillFactor( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the index being configured. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerIndexExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerIndexExtensions.cs index af32ab3f1dd..6d47396a9b2 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerIndexExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerIndexExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerIndexExtensions diff --git a/src/EFCore.SqlServer/Extensions/SqlServerKeyBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerKeyBuilderExtensions.cs index 2a248e20eb6..0deb6c04875 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerKeyBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerKeyBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerKeyBuilderExtensions @@ -21,7 +21,7 @@ public static class SqlServerKeyBuilderExtensions /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the key being configured. @@ -39,7 +39,7 @@ public static KeyBuilder IsClustered(this KeyBuilder keyBuilder, bool clustered /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the key being configured. @@ -55,7 +55,7 @@ public static KeyBuilder IsClustered( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the key being configured. @@ -84,7 +84,7 @@ public static KeyBuilder IsClustered( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the key being configured. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerKeyExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerKeyExtensions.cs index 8f22e06b691..5a5c7d1e1b4 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerKeyExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerKeyExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerKeyExtensions diff --git a/src/EFCore.SqlServer/Extensions/SqlServerMigrationBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerMigrationBuilderExtensions.cs index 368ba006a8a..d996d0ca99a 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerMigrationBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerMigrationBuilderExtensions.cs @@ -15,7 +15,7 @@ public static class SqlServerMigrationBuilderExtensions /// Returns if the database provider currently in use is the SQL Server provider. /// /// - /// See Accessing SQL Server and SQL Azure databases with EF Core + /// See Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// diff --git a/src/EFCore.SqlServer/Extensions/SqlServerModelBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerModelBuilderExtensions.cs index 0ab2c60f7ae..f615ffad5c3 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerModelBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerModelBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerModelBuilderExtensions @@ -22,7 +22,7 @@ public static class SqlServerModelBuilderExtensions /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -63,7 +63,7 @@ public static ModelBuilder UseHiLo( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -93,7 +93,7 @@ public static ModelBuilder UseHiLo( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -120,7 +120,7 @@ public static bool CanSetHiLoSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -157,7 +157,7 @@ public static ModelBuilder UseKeySequences( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -189,7 +189,7 @@ public static ModelBuilder UseIdentityColumns( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -207,7 +207,7 @@ public static ModelBuilder UseIdentityColumns( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -236,7 +236,7 @@ public static ModelBuilder UseIdentityColumns( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -254,7 +254,7 @@ public static bool CanSetIdentityColumnSeed( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -283,7 +283,7 @@ public static bool CanSetIdentityColumnSeed( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -302,7 +302,7 @@ public static bool CanSetIdentityColumnIncrement( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -357,7 +357,7 @@ void RemoveKeySequenceAnnotations() /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -380,7 +380,7 @@ public static bool CanSetValueGenerationStrategy( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -405,7 +405,7 @@ public static ModelBuilder HasDatabaseMaxSize(this ModelBuilder modelBuilder, st /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -435,7 +435,7 @@ public static ModelBuilder HasDatabaseMaxSize(this ModelBuilder modelBuilder, st /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -457,7 +457,7 @@ public static bool CanSetDatabaseMaxSize( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -482,7 +482,7 @@ public static ModelBuilder HasServiceTier(this ModelBuilder modelBuilder, string /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -507,7 +507,7 @@ public static ModelBuilder HasServiceTierSql(this ModelBuilder modelBuilder, str /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -537,7 +537,7 @@ public static ModelBuilder HasServiceTierSql(this ModelBuilder modelBuilder, str /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. @@ -559,7 +559,7 @@ public static bool CanSetServiceTierSql( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -584,7 +584,7 @@ public static ModelBuilder HasPerformanceLevel(this ModelBuilder modelBuilder, s /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -609,7 +609,7 @@ public static ModelBuilder HasPerformanceLevelSql(this ModelBuilder modelBuilder /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// @@ -639,7 +639,7 @@ public static ModelBuilder HasPerformanceLevelSql(this ModelBuilder modelBuilder /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The model builder. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerModelExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerModelExtensions.cs index 7d494049b24..2925804927e 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerModelExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerModelExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerModelExtensions diff --git a/src/EFCore.SqlServer/Extensions/SqlServerPrimitiveCollectionBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerPrimitiveCollectionBuilderExtensions.cs index 17dd2d26dfe..87fa60c5132 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerPrimitiveCollectionBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerPrimitiveCollectionBuilderExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerPrimitiveCollectionBuilderExtensions @@ -18,7 +18,7 @@ public static class SqlServerPrimitiveCollectionBuilderExtensions /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. @@ -38,7 +38,7 @@ public static PrimitiveCollectionBuilder IsSparse(this PrimitiveCollectionBuilde /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerPropertyBuilderExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerPropertyBuilderExtensions.cs index 11d8e694a1c..f959733c7e3 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerPropertyBuilderExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerPropertyBuilderExtensions.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerPropertyBuilderExtensions @@ -22,7 +22,7 @@ public static class SqlServerPropertyBuilderExtensions /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -63,7 +63,7 @@ public static PropertyBuilder UseHiLo( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -83,7 +83,7 @@ public static PropertyBuilder UseHiLo( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -115,7 +115,7 @@ public static PropertyBuilder UseHiLo( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -142,7 +142,7 @@ public static bool CanSetHiLoSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -176,7 +176,7 @@ public static PropertyBuilder UseSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -196,7 +196,7 @@ public static PropertyBuilder UseSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -228,7 +228,7 @@ public static PropertyBuilder UseSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -255,7 +255,7 @@ public static bool CanSetSequence( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -285,7 +285,7 @@ public static PropertyBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -304,7 +304,7 @@ public static PropertyBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the column being configured. @@ -330,7 +330,7 @@ public static ColumnBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -350,7 +350,7 @@ public static PropertyBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -370,7 +370,7 @@ public static PropertyBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The type of the property being configured. @@ -389,7 +389,7 @@ public static ColumnBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -418,7 +418,7 @@ public static ColumnBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -449,7 +449,7 @@ public static ColumnBuilder UseIdentityColumn( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -468,7 +468,7 @@ public static bool CanSetIdentityColumnSeed( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -493,7 +493,7 @@ public static bool CanSetIdentityColumnSeed( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -522,7 +522,7 @@ public static bool CanSetIdentityColumnSeed( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -553,7 +553,7 @@ public static bool CanSetIdentityColumnSeed( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -572,7 +572,7 @@ public static bool CanSetIdentityColumnIncrement( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -597,7 +597,7 @@ public static bool CanSetIdentityColumnIncrement( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -647,7 +647,7 @@ public static bool CanSetIdentityColumnIncrement( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -684,7 +684,7 @@ public static bool CanSetIdentityColumnIncrement( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -705,7 +705,7 @@ public static bool CanSetValueGenerationStrategy( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// The builder for the property being configured. @@ -732,7 +732,7 @@ public static bool CanSetValueGenerationStrategy( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. @@ -752,7 +752,7 @@ public static PropertyBuilder IsSparse(this PropertyBuilder propertyBuilder, boo /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. @@ -770,7 +770,7 @@ public static PropertyBuilder IsSparse( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. @@ -799,7 +799,7 @@ public static PropertyBuilder IsSparse( /// /// /// See Modeling entity types and relationships, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. Also see /// Sparse columns for /// general information on SQL Server sparse columns. diff --git a/src/EFCore.SqlServer/Extensions/SqlServerPropertyExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerPropertyExtensions.cs index 5251dbdabbf..079a85b724e 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerPropertyExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerPropertyExtensions.cs @@ -12,7 +12,7 @@ namespace Microsoft.EntityFrameworkCore; /// /// /// See Modeling entity types and relationships, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public static class SqlServerPropertyExtensions diff --git a/src/EFCore.SqlServer/Extensions/SqlServerServiceCollectionExtensions.cs b/src/EFCore.SqlServer/Extensions/SqlServerServiceCollectionExtensions.cs index a994c313168..12f2d4cf882 100644 --- a/src/EFCore.SqlServer/Extensions/SqlServerServiceCollectionExtensions.cs +++ b/src/EFCore.SqlServer/Extensions/SqlServerServiceCollectionExtensions.cs @@ -45,7 +45,7 @@ public static class SqlServerServiceCollectionExtensions /// /// /// See Using DbContextOptions, and - /// Accessing SQL Server and SQL Azure databases with EF Core + /// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerConventionSetBuilder.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerConventionSetBuilder.cs index 3638209f525..2ad3a9237be 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerConventionSetBuilder.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerConventionSetBuilder.cs @@ -18,7 +18,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerDbFunctionConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerDbFunctionConvention.cs index 872b6ee91c1..0a256c30604 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerDbFunctionConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerDbFunctionConvention.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerDbFunctionConvention : IModelFinalizingConvention diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs index 16df1332b66..b83cc49b1d7 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs @@ -13,7 +13,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerIndexConvention : diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerMemoryOptimizedTablesConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerMemoryOptimizedTablesConvention.cs index 0f71d79bb53..5dc3c3705bc 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerMemoryOptimizedTablesConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerMemoryOptimizedTablesConvention.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerMemoryOptimizedTablesConvention : diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOnDeleteConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOnDeleteConvention.cs index 3c29be31606..d250176508b 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOnDeleteConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOnDeleteConvention.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerOnDeleteConvention : CascadeDeleteConvention, diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOutputClauseConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOutputClauseConvention.cs index eb128e7620c..0be9eb80f6c 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOutputClauseConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerOutputClauseConvention.cs @@ -9,7 +9,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerOutputClauseConvention : ITriggerAddedConvention, ITriggerRemovedConvention diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerRuntimeModelConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerRuntimeModelConvention.cs index e9118e97711..b64397045a7 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerRuntimeModelConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerRuntimeModelConvention.cs @@ -12,7 +12,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerRuntimeModelConvention : RelationalRuntimeModelConvention diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerSharedTableConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerSharedTableConvention.cs index 3c26013b06a..d40b142c7e2 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerSharedTableConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerSharedTableConvention.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerSharedTableConvention : SharedTableConvention diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerStoreGenerationConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerStoreGenerationConvention.cs index 090821f4581..01e251ed153 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerStoreGenerationConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerStoreGenerationConvention.cs @@ -13,7 +13,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerStoreGenerationConvention : StoreGenerationConvention diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerTemporalConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerTemporalConvention.cs index 722eca989e2..32bc4f23ca1 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerTemporalConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerTemporalConvention.cs @@ -10,7 +10,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerTemporalConvention : IEntityTypeAnnotationChangedConvention, diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationConvention.cs index 338cd8c1fd4..b7a201bed31 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationConvention.cs @@ -15,7 +15,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerValueGenerationConvention : RelationalValueGenerationConvention diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationStrategyConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationStrategyConvention.cs index 2e58ef8dde1..8085d6f5027 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationStrategyConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerValueGenerationStrategyConvention.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerValueGenerationStrategyConvention : IModelInitializedConvention, IModelFinalizingConvention diff --git a/src/EFCore.SqlServer/Metadata/SqlServerValueGenerationStrategy.cs b/src/EFCore.SqlServer/Metadata/SqlServerValueGenerationStrategy.cs index e90240b9cee..8e88482a994 100644 --- a/src/EFCore.SqlServer/Metadata/SqlServerValueGenerationStrategy.cs +++ b/src/EFCore.SqlServer/Metadata/SqlServerValueGenerationStrategy.cs @@ -11,7 +11,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata; /// /// /// See Model building conventions, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public enum SqlServerValueGenerationStrategy diff --git a/src/EFCore.SqlServer/Migrations/Operations/SqlServerCreateDatabaseOperation.cs b/src/EFCore.SqlServer/Migrations/Operations/SqlServerCreateDatabaseOperation.cs index 05ecc66db12..6be93893200 100644 --- a/src/EFCore.SqlServer/Migrations/Operations/SqlServerCreateDatabaseOperation.cs +++ b/src/EFCore.SqlServer/Migrations/Operations/SqlServerCreateDatabaseOperation.cs @@ -8,7 +8,7 @@ namespace Microsoft.EntityFrameworkCore.Migrations.Operations; /// /// /// See Database migrations, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// [DebuggerDisplay("CREATE DATABASE {Name}")] diff --git a/src/EFCore.SqlServer/Migrations/Operations/SqlServerDropDatabaseOperation.cs b/src/EFCore.SqlServer/Migrations/Operations/SqlServerDropDatabaseOperation.cs index 0cc5675a2e0..6d638a91f23 100644 --- a/src/EFCore.SqlServer/Migrations/Operations/SqlServerDropDatabaseOperation.cs +++ b/src/EFCore.SqlServer/Migrations/Operations/SqlServerDropDatabaseOperation.cs @@ -8,7 +8,7 @@ namespace Microsoft.EntityFrameworkCore.Migrations.Operations; /// /// /// See Database migrations, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// public class SqlServerDropDatabaseOperation : MigrationOperation diff --git a/src/EFCore.SqlServer/Migrations/SqlServerMigrationsSqlGenerator.cs b/src/EFCore.SqlServer/Migrations/SqlServerMigrationsSqlGenerator.cs index ded9236cb74..03a02ec72e4 100644 --- a/src/EFCore.SqlServer/Migrations/SqlServerMigrationsSqlGenerator.cs +++ b/src/EFCore.SqlServer/Migrations/SqlServerMigrationsSqlGenerator.cs @@ -23,7 +23,7 @@ namespace Microsoft.EntityFrameworkCore.Migrations; /// /// /// See Database migrations, and -/// Accessing SQL Server and SQL Azure databases with EF Core +/// Accessing SQL Server and Azure SQL databases with EF Core /// for more information and examples. /// /// diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerJsonPostprocessor.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerJsonPostprocessor.cs index 4ec630254f5..b7fdcb9111a 100644 --- a/src/EFCore.SqlServer/Query/Internal/SqlServerJsonPostprocessor.cs +++ b/src/EFCore.SqlServer/Query/Internal/SqlServerJsonPostprocessor.cs @@ -236,8 +236,10 @@ SqlExpression RewriteOpenJsonColumn( columnExpression.Table, "value", columnExpression.Type, _nvarcharMaxTypeMapping, columnExpression.IsNullable); Check.DebugAssert(columnInfo.Path is not null, "Path shouldn't be null in OPENJSON WITH"); - Check.DebugAssert(!columnInfo.AsJson, "AS JSON signifies an owned sub-entity being projected out of OPENJSON/WITH. " - + "Columns referring to that must be wrapped be Json{Scalar,Query}Expression and will have been already dealt with above"); + //Check.DebugAssert( + // !columnInfo.AsJson || columnInfo.TypeMapping.ElementTypeMapping is not null, + // "AS JSON signifies an owned sub-entity or array of primitives being projected out of OPENJSON/WITH. " + // + "Columns referring to sub-entities must be wrapped in Json{Scalar,Query}Expression and will have been already dealt with above"); if (columnInfo.Path is []) { diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs index 73ec9a2759b..7e910650357 100644 --- a/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs @@ -245,7 +245,8 @@ protected override ShapedQueryExpression TransformJsonQueryToTable(JsonQueryExpr { Name = jsonPropertyName, TypeMapping = property.GetRelationalTypeMapping(), - Path = new PathSegment[] { new(jsonPropertyName) } + Path = new PathSegment[] { new(jsonPropertyName) }, + AsJson = property.GetRelationalTypeMapping().ElementTypeMapping is not null }); } } diff --git a/test/EFCore.Cosmos.FunctionalTests/MaterializationInterceptionCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/MaterializationInterceptionCosmosTest.cs index b98e8456eea..9ef9d4e4be1 100644 --- a/test/EFCore.Cosmos.FunctionalTests/MaterializationInterceptionCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/MaterializationInterceptionCosmosTest.cs @@ -11,6 +11,9 @@ public MaterializationInterceptionCosmosTest(MaterializationInterceptionCosmosFi { } + public override Task Intercept_query_materialization_with_owned_types_projecting_collection(bool async) + => Task.CompletedTask; + public class CosmosLibraryContext : LibraryContext { public CosmosLibraryContext(DbContextOptions options) diff --git a/test/EFCore.Relational.Specification.Tests/Query/JsonQueryTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/JsonQueryTestBase.cs index 4e53cc0c647..8ff05b54411 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/JsonQueryTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/JsonQueryTestBase.cs @@ -1171,7 +1171,7 @@ public virtual Task Json_collection_in_projection_with_composition_where_and_ano .Select(xx => new { xx.Names, xx.Numbers }) .ToList())); - [ConditionalTheory(Skip = "issue #31365")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Json_collection_filter_in_projection(bool async) => AssertQuery( @@ -1179,9 +1179,56 @@ public virtual Task Json_collection_filter_in_projection(bool async) ss => ss.Set() .OrderBy(x => x.Id) .Select(x => x.OwnedCollectionRoot.Where(xx => xx.Name != "Foo").ToList()) - .AsNoTracking()); + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => + { + AssertCollection(e, a, ordered: true, elementAsserter: (ee, aa) => AssertEqual(ee, aa)); + }); + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Json_nested_collection_filter_in_projection(bool async) + => AssertQuery( + async, + ss => ss.Set() + .OrderBy(x => x.Id) + .Select(x => x.OwnedCollectionRoot + .Select(xx => xx.OwnedCollectionBranch.Where(xxx => xxx.Date != new DateTime(2000, 1, 1)).ToList())) + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => AssertCollection(e, a, ordered: true, elementAsserter: (ee, aa) => AssertCollection(ee, aa, ordered: true))); - [ConditionalTheory(Skip = "issue #31365")] + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Json_nested_collection_anonymous_projection_in_projection(bool async) + => AssertQuery( + async, + ss => ss.Set() + .OrderBy(x => x.Id) + .Select(x => x.OwnedCollectionRoot + .Select(xx => xx.OwnedCollectionBranch.Select(xxx => new + { + xxx.Date, + xxx.Enum, + xxx.Enums, + xxx.Fraction, + xxx.OwnedReferenceLeaf, + xxx.OwnedCollectionLeaf + }).ToList())) + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => AssertCollection(e, a, ordered: true, elementAsserter: (ee, aa) => AssertCollection(ee, aa, ordered: true, elementAsserter: (eee, aaa) => + { + AssertEqual(eee.Date, aaa.Date); + AssertEqual(eee.Enum, aaa.Enum); + AssertCollection(eee.Enums, aaa.Enums, ordered: true); + AssertEqual(eee.Fraction, aaa.Fraction); + AssertEqual(eee.OwnedReferenceLeaf, aaa.OwnedReferenceLeaf); + AssertCollection(eee.OwnedCollectionLeaf, aaa.OwnedCollectionLeaf, ordered: true); + }))); + + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Json_collection_skip_take_in_projection(bool async) => AssertQuery( @@ -1189,7 +1236,9 @@ public virtual Task Json_collection_skip_take_in_projection(bool async) ss => ss.Set() .OrderBy(x => x.Id) .Select(x => x.OwnedCollectionRoot.OrderBy(xx => xx.Name).Skip(1).Take(5).ToList()) - .AsNoTracking()); + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => AssertCollection(e, a, ordered: true)); [ConditionalTheory] [MemberData(nameof(IsAsyncData))] @@ -1240,12 +1289,9 @@ public virtual Task Json_collection_skip_take_in_projection_with_json_reference_ .Select(xx => xx.OwnedReferenceBranch).ToList()) .AsNoTracking(), assertOrder: true, - elementAsserter: (e, a) => - { - AssertCollection(e, a, ordered: true); - }); + elementAsserter: (e, a) => AssertCollection(e, a, ordered: true)); - [ConditionalTheory(Skip = "issue #31365")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Json_collection_distinct_in_projection(bool async) => AssertQuery( @@ -1253,9 +1299,23 @@ public virtual Task Json_collection_distinct_in_projection(bool async) ss => ss.Set() .OrderBy(x => x.Id) .Select(x => x.OwnedCollectionRoot.Distinct()) - .AsNoTracking()); + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => AssertCollection(e, a, elementSorter: ee => (ee.Name, ee.Number))); + + [ConditionalTheory(Skip = "issue #31397")] + [MemberData(nameof(IsAsyncData))] + public virtual Task Json_collection_anonymous_projection_distinct_in_projection(bool async) + => AssertQuery( + async, + ss => ss.Set() + .OrderBy(x => x.Id) + .Select(x => x.OwnedCollectionRoot.Select(xx => xx.Name).Distinct().ToList()) + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => AssertCollection(e, a, elementSorter: ee => ee)); - [ConditionalTheory(Skip = "issue #31365")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Json_collection_leaf_filter_in_projection(bool async) => AssertQuery( @@ -1264,25 +1324,96 @@ public virtual Task Json_collection_leaf_filter_in_projection(bool async) .OrderBy(x => x.Id) .Select(x => x.OwnedReferenceRoot.OwnedReferenceBranch.OwnedCollectionLeaf .Where(xx => xx.SomethingSomething != "Baz").ToList()) - .AsNoTracking()); + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => AssertCollection(e, a, ordered: true)); + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Json_multiple_collection_projections(bool async) + => AssertQuery( + async, + ss => ss.Set() + .OrderBy(x => x.Id) + .Select(x => new + { + First = x.OwnedReferenceRoot.OwnedReferenceBranch.OwnedCollectionLeaf + .Where(xx => xx.SomethingSomething != "Baz").ToList(), + Second = x.OwnedCollectionRoot.Distinct().ToList(), + Third = x.OwnedCollectionRoot + .Select(xx => xx.OwnedCollectionBranch.Where(xxx => xxx.Date != new DateTime(2000, 1, 1)).ToList()), + Fourth = x.EntityCollection.ToList() + }) + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => + { + AssertCollection(e.First, a.First, ordered: true); + AssertCollection(e.Second, a.Second, elementSorter: ee => (ee.Name, ee.Number)); + AssertCollection(e.Third, a.Third, ordered: true, elementAsserter: (ee, aa) => AssertCollection(ee, aa, ordered: true)); + AssertCollection(e.Fourth, a.Fourth); + }); - [ConditionalTheory(Skip = "issue #31365")] + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Json_branch_collection_distinct_and_other_collection(bool async) + => AssertQuery( + async, + ss => ss.Set() + .OrderBy(x => x.Id) + .Select(x => new + { + First = x.OwnedReferenceRoot.OwnedCollectionBranch.Distinct().ToList(), + Second = x.EntityCollection.ToList() + }) + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => + { + AssertCollection(e.First, a.First, ordered: true); + AssertCollection(e.Second, a.Second); + }); + + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Json_leaf_collection_distinct_and_other_collection(bool async) + => AssertQuery( + async, + ss => ss.Set() + .OrderBy(x => x.Id) + .Select(x => new + { + First = x.OwnedReferenceRoot.OwnedReferenceBranch.OwnedCollectionLeaf.Distinct().ToList(), + Second = x.EntityCollection.ToList() + }) + .AsNoTracking(), + assertOrder: true, + elementAsserter: (e, a) => + { + AssertCollection(e.First, a.First, ordered: true); + AssertCollection(e.Second, a.Second); + }); + + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Json_collection_SelectMany(bool async) => AssertQuery( async, ss => ss.Set() .SelectMany(x => x.OwnedCollectionRoot) - .AsNoTracking()); + .AsNoTracking(), + elementSorter: e => (e.Number, e.Name)); - [ConditionalTheory(Skip = "issue #31365")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Json_nested_collection_SelectMany(bool async) => AssertQuery( async, ss => ss.Set() .SelectMany(x => x.OwnedReferenceRoot.OwnedCollectionBranch) - .AsNoTracking()); + .AsNoTracking(), + elementSorter: e => (e.Enum, e.Date, e.NullableEnum, e.Fraction)); [ConditionalTheory(Skip = "issue #31364")] [MemberData(nameof(IsAsyncData))] diff --git a/test/EFCore.Specification.Tests/MaterializationInterceptionTestBase.cs b/test/EFCore.Specification.Tests/MaterializationInterceptionTestBase.cs index 7d0cbef687e..fd8520508a8 100644 --- a/test/EFCore.Specification.Tests/MaterializationInterceptionTestBase.cs +++ b/test/EFCore.Specification.Tests/MaterializationInterceptionTestBase.cs @@ -261,6 +261,97 @@ public virtual async Task Intercept_query_materialization_with_owned_types(bool } } + [ConditionalTheory] // Issue #31365 + [InlineData(false)] + [InlineData(true)] + public virtual async Task Intercept_query_materialization_with_owned_types_projecting_collection(bool async) + { + var creatingInstanceCounts = new Dictionary(); + var createdInstanceCounts = new Dictionary(); + var initializingInstanceCounts = new Dictionary(); + var initializedInstanceCounts = new Dictionary(); + LibraryContext? context = null; + + var interceptors = new[] + { + new ValidatingMaterializationInterceptor( + (data, instance, method) => + { + Assert.Same(context, data.Context); + Assert.Equal(QueryTrackingBehavior.NoTracking, data.QueryTrackingBehavior); + + int count; + var clrType = data.EntityType.ClrType; + switch (method) + { + case nameof(IMaterializationInterceptor.CreatingInstance): + count = creatingInstanceCounts.GetOrAddNew(clrType); + creatingInstanceCounts[clrType] = count + 1; + Assert.Null(instance); + break; + case nameof(IMaterializationInterceptor.CreatedInstance): + count = createdInstanceCounts.GetOrAddNew(clrType); + createdInstanceCounts[clrType] = count + 1; + Assert.Same(clrType, instance!.GetType()); + break; + case nameof(IMaterializationInterceptor.InitializingInstance): + count = initializingInstanceCounts.GetOrAddNew(clrType); + initializingInstanceCounts[clrType] = count + 1; + Assert.Same(clrType, instance!.GetType()); + break; + case nameof(IMaterializationInterceptor.InitializedInstance): + count = initializedInstanceCounts.GetOrAddNew(clrType); + initializedInstanceCounts[clrType] = count + 1; + Assert.Same(clrType, instance!.GetType()); + break; + } + }) + }; + + using (context = CreateContext(interceptors, inject: true)) + { + context.Add( + new TestEntity30244 + { + Id = _id++, + Name = "TestIssue", + Settings = { new("Value1", "1"), new("Value2", "9") } + }); + + _ = async + ? await context.SaveChangesAsync() + : context.SaveChanges(); + + context.ChangeTracker.Clear(); + + var query = context.Set() + .AsNoTracking() + .OrderBy(e => e.Id) + .Select(x => x.Settings.Where(s => s.Key != "Foo").ToList()); + + var collection = async + ? await query.FirstOrDefaultAsync() + : query.FirstOrDefault(); + + Assert.NotNull(collection); + Assert.Equal("Value1", collection[0].Key); + Assert.Equal("1", collection[0].Value); + Assert.Contains(("Value2", "9"), collection.Select(x => (x.Key, x.Value))); + + Assert.Equal(1, creatingInstanceCounts.Count); + Assert.Equal(2, creatingInstanceCounts[typeof(KeyValueSetting30244)]); + + Assert.Equal(1, createdInstanceCounts.Count); + Assert.Equal(2, createdInstanceCounts[typeof(KeyValueSetting30244)]); + + Assert.Equal(1, initializingInstanceCounts.Count); + Assert.Equal(2, initializingInstanceCounts[typeof(KeyValueSetting30244)]); + + Assert.Equal(1, initializedInstanceCounts.Count); + Assert.Equal(2, initializedInstanceCounts[typeof(KeyValueSetting30244)]); + } + } + [ConditionalTheory] [InlineData(false)] [InlineData(true)] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/JsonQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/JsonQuerySqlServerTest.cs index 68164d0fe11..cbdddc497aa 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/JsonQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/JsonQuerySqlServerTest.cs @@ -1012,10 +1012,10 @@ SELECT 1 FROM OPENJSON([j].[OwnedReferenceRoot], '$.OwnedCollectionBranch') WITH ( [Date] datetime2 '$.Date', [Enum] int '$.Enum', - [Enums] nvarchar(max) '$.Enums', + [Enums] nvarchar(max) '$.Enums' AS JSON, [Fraction] decimal(18,2) '$.Fraction', [NullableEnum] int '$.NullableEnum', - [NullableEnums] nvarchar(max) '$.NullableEnums', + [NullableEnums] nvarchar(max) '$.NullableEnums' AS JSON, [OwnedCollectionLeaf] nvarchar(max) '$.OwnedCollectionLeaf' AS JSON, [OwnedReferenceLeaf] nvarchar(max) '$.OwnedReferenceLeaf' AS JSON ) AS [o] @@ -1097,10 +1097,10 @@ SELECT COUNT(*) FROM OPENJSON([j].[OwnedReferenceRoot], '$.OwnedCollectionBranch') WITH ( [Date] datetime2 '$.Date', [Enum] int '$.Enum', - [Enums] nvarchar(max) '$.Enums', + [Enums] nvarchar(max) '$.Enums' AS JSON, [Fraction] decimal(18,2) '$.Fraction', [NullableEnum] int '$.NullableEnum', - [NullableEnums] nvarchar(max) '$.NullableEnums', + [NullableEnums] nvarchar(max) '$.NullableEnums' AS JSON, [OwnedCollectionLeaf] nvarchar(max) '$.OwnedCollectionLeaf' AS JSON, [OwnedReferenceLeaf] nvarchar(max) '$.OwnedReferenceLeaf' AS JSON ) AS [o] @@ -1121,9 +1121,9 @@ WHERE EXISTS ( SELECT 1 FROM OPENJSON([j].[OwnedCollectionRoot], '$') WITH ( [Name] nvarchar(max) '$.Name', - [Names] nvarchar(max) '$.Names', + [Names] nvarchar(max) '$.Names' AS JSON, [Number] int '$.Number', - [Numbers] nvarchar(max) '$.Numbers', + [Numbers] nvarchar(max) '$.Numbers' AS JSON, [OwnedCollectionBranch] nvarchar(max) '$.OwnedCollectionBranch' AS JSON, [OwnedReferenceBranch] nvarchar(max) '$.OwnedReferenceBranch' AS JSON ) AS [o] @@ -1132,10 +1132,10 @@ SELECT COUNT(*) FROM OPENJSON([o].[OwnedCollectionBranch], '$') WITH ( [Date] datetime2 '$.Date', [Enum] int '$.Enum', - [Enums] nvarchar(max) '$.Enums', + [Enums] nvarchar(max) '$.Enums' AS JSON, [Fraction] decimal(18,2) '$.Fraction', [NullableEnum] int '$.NullableEnum', - [NullableEnums] nvarchar(max) '$.NullableEnums', + [NullableEnums] nvarchar(max) '$.NullableEnums' AS JSON, [OwnedCollectionLeaf] nvarchar(max) '$.OwnedCollectionLeaf' AS JSON, [OwnedReferenceLeaf] nvarchar(max) '$.OwnedReferenceLeaf' AS JSON ) AS [o0]) = 2) @@ -1152,9 +1152,9 @@ public override async Task Json_collection_in_projection_with_composition_count( SELECT COUNT(*) FROM OPENJSON([j].[OwnedCollectionRoot], '$') WITH ( [Name] nvarchar(max) '$.Name', - [Names] nvarchar(max) '$.Names', + [Names] nvarchar(max) '$.Names' AS JSON, [Number] int '$.Number', - [Numbers] nvarchar(max) '$.Numbers', + [Numbers] nvarchar(max) '$.Numbers' AS JSON, [OwnedCollectionBranch] nvarchar(max) '$.OwnedCollectionBranch' AS JSON, [OwnedReferenceBranch] nvarchar(max) '$.OwnedReferenceBranch' AS JSON ) AS [o]) @@ -1214,14 +1214,73 @@ public override async Task Json_collection_filter_in_projection(bool async) { await base.Json_collection_filter_in_projection(async); - AssertSql(""); + AssertSql( +""" +SELECT [j].[Id], [t].[Id], [t].[Name], [t].[Names], [t].[Number], [t].[Numbers], [t].[c], [t].[c0], [t].[key] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT [j].[Id], JSON_VALUE([o].[value], '$.Name') AS [Name], JSON_QUERY([o].[value], '$.Names') AS [Names], CAST(JSON_VALUE([o].[value], '$.Number') AS int) AS [Number], JSON_QUERY([o].[value], '$.Numbers') AS [Numbers], JSON_QUERY([o].[value], '$.OwnedCollectionBranch') AS [c], JSON_QUERY([o].[value], '$.OwnedReferenceBranch') AS [c0], [o].[key], CAST([o].[key] AS int) AS [c1] + FROM OPENJSON([j].[OwnedCollectionRoot], '$') AS [o] + WHERE JSON_VALUE([o].[value], '$.Name') <> N'Foo' OR JSON_VALUE([o].[value], '$.Name') IS NULL +) AS [t] +ORDER BY [j].[Id], [t].[c1] +"""); + } + + public override async Task Json_nested_collection_filter_in_projection(bool async) + { + await base.Json_nested_collection_filter_in_projection(async); + + AssertSql( +""" +SELECT [j].[Id], [t0].[key], [t0].[Id], [t0].[Date], [t0].[Enum], [t0].[Enums], [t0].[Fraction], [t0].[NullableEnum], [t0].[NullableEnums], [t0].[c], [t0].[c0], [t0].[key0] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT [o].[key], [t].[Id], [t].[Date], [t].[Enum], [t].[Enums], [t].[Fraction], [t].[NullableEnum], [t].[NullableEnums], [t].[c], [t].[c0], [t].[key] AS [key0], CAST([o].[key] AS int) AS [c1], [t].[c1] AS [c10] + FROM OPENJSON([j].[OwnedCollectionRoot], '$') AS [o] + OUTER APPLY ( + SELECT [j].[Id], CAST(JSON_VALUE([o0].[value], '$.Date') AS datetime2) AS [Date], CAST(JSON_VALUE([o0].[value], '$.Enum') AS int) AS [Enum], JSON_QUERY([o0].[value], '$.Enums') AS [Enums], CAST(JSON_VALUE([o0].[value], '$.Fraction') AS decimal(18,2)) AS [Fraction], CAST(JSON_VALUE([o0].[value], '$.NullableEnum') AS int) AS [NullableEnum], JSON_QUERY([o0].[value], '$.NullableEnums') AS [NullableEnums], JSON_QUERY([o0].[value], '$.OwnedCollectionLeaf') AS [c], JSON_QUERY([o0].[value], '$.OwnedReferenceLeaf') AS [c0], [o0].[key], CAST([o0].[key] AS int) AS [c1] + FROM OPENJSON(JSON_QUERY([o].[value], '$.OwnedCollectionBranch'), '$') AS [o0] + WHERE CAST(JSON_VALUE([o0].[value], '$.Date') AS datetime2) <> '2000-01-01T00:00:00.0000000' OR CAST(JSON_VALUE([o0].[value], '$.Date') AS datetime2) IS NULL + ) AS [t] +) AS [t0] +ORDER BY [j].[Id], [t0].[c1], [t0].[key], [t0].[c10] +"""); + } + + public override async Task Json_nested_collection_anonymous_projection_in_projection(bool async) + { + await base.Json_nested_collection_anonymous_projection_in_projection(async); + + AssertSql( +""" +SELECT [j].[Id], [t].[key], [t].[c], [t].[c0], [t].[c1], [t].[c2], [t].[c3], [t].[Id], [t].[c4], [t].[key0] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT [o].[key], CAST(JSON_VALUE([o0].[value], '$.Date') AS datetime2) AS [c], CAST(JSON_VALUE([o0].[value], '$.Enum') AS int) AS [c0], JSON_QUERY([o0].[value], '$.Enums') AS [c1], CAST(JSON_VALUE([o0].[value], '$.Fraction') AS decimal(18,2)) AS [c2], JSON_QUERY([o0].[value], '$.OwnedReferenceLeaf') AS [c3], [j].[Id], JSON_QUERY([o0].[value], '$.OwnedCollectionLeaf') AS [c4], [o0].[key] AS [key0], CAST([o].[key] AS int) AS [c5], CAST([o0].[key] AS int) AS [c6] + FROM OPENJSON([j].[OwnedCollectionRoot], '$') AS [o] + OUTER APPLY OPENJSON(JSON_QUERY([o].[value], '$.OwnedCollectionBranch'), '$') AS [o0] +) AS [t] +ORDER BY [j].[Id], [t].[c5], [t].[key], [t].[c6] +"""); } public override async Task Json_collection_skip_take_in_projection(bool async) { await base.Json_collection_skip_take_in_projection(async); - AssertSql(""); + AssertSql( +""" +SELECT [j].[Id], [t].[Id], [t].[Name], [t].[Names], [t].[Number], [t].[Numbers], [t].[c], [t].[c0], [t].[key] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT [j].[Id], JSON_VALUE([o].[value], '$.Name') AS [Name], JSON_QUERY([o].[value], '$.Names') AS [Names], CAST(JSON_VALUE([o].[value], '$.Number') AS int) AS [Number], JSON_QUERY([o].[value], '$.Numbers') AS [Numbers], JSON_QUERY([o].[value], '$.OwnedCollectionBranch') AS [c], JSON_QUERY([o].[value], '$.OwnedReferenceBranch') AS [c0], [o].[key], JSON_VALUE([o].[value], '$.Name') AS [c1] + FROM OPENJSON([j].[OwnedCollectionRoot], '$') AS [o] + ORDER BY JSON_VALUE([o].[value], '$.Name') + OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY +) AS [t] +ORDER BY [j].[Id], [t].[c1] +"""); } public override async Task Json_collection_skip_take_in_projection_project_into_anonymous_type(bool async) @@ -1264,6 +1323,29 @@ public override async Task Json_collection_distinct_in_projection(bool async) { await base.Json_collection_distinct_in_projection(async); + AssertSql( +""" +SELECT [j].[Id], [t].[Id], [t].[Name], [t].[Names], [t].[Number], [t].[Numbers], [t].[c], [t].[c0] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT DISTINCT [j].[Id], [o].[Name], [o].[Names], [o].[Number], [o].[Numbers], [o].[OwnedCollectionBranch] AS [c], [o].[OwnedReferenceBranch] AS [c0] + FROM OPENJSON([j].[OwnedCollectionRoot], '$') WITH ( + [Name] nvarchar(max) '$.Name', + [Names] nvarchar(max) '$.Names' AS JSON, + [Number] int '$.Number', + [Numbers] nvarchar(max) '$.Numbers' AS JSON, + [OwnedCollectionBranch] nvarchar(max) '$.OwnedCollectionBranch' AS JSON, + [OwnedReferenceBranch] nvarchar(max) '$.OwnedReferenceBranch' AS JSON + ) AS [o] +) AS [t] +ORDER BY [j].[Id], [t].[Name] +"""); + } + + public override async Task Json_collection_anonymous_projection_distinct_in_projection(bool async) + { + await base.Json_collection_anonymous_projection_distinct_in_projection(async); + AssertSql(""); } @@ -1271,21 +1353,138 @@ public override async Task Json_collection_leaf_filter_in_projection(bool async) { await base.Json_collection_leaf_filter_in_projection(async); - AssertSql(""); + AssertSql( +""" +SELECT [j].[Id], [t].[Id], [t].[SomethingSomething], [t].[key] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT [j].[Id], JSON_VALUE([o].[value], '$.SomethingSomething') AS [SomethingSomething], [o].[key], CAST([o].[key] AS int) AS [c] + FROM OPENJSON([j].[OwnedReferenceRoot], '$.OwnedReferenceBranch.OwnedCollectionLeaf') AS [o] + WHERE JSON_VALUE([o].[value], '$.SomethingSomething') <> N'Baz' OR JSON_VALUE([o].[value], '$.SomethingSomething') IS NULL +) AS [t] +ORDER BY [j].[Id], [t].[c] +"""); + } + + public override async Task Json_multiple_collection_projections(bool async) + { + await base.Json_multiple_collection_projections(async); + + AssertSql( +""" +SELECT [j].[Id], [t].[Id], [t].[SomethingSomething], [t].[key], [t0].[Id], [t0].[Name], [t0].[Names], [t0].[Number], [t0].[Numbers], [t0].[c], [t0].[c0], [t1].[key], [t1].[Id], [t1].[Date], [t1].[Enum], [t1].[Enums], [t1].[Fraction], [t1].[NullableEnum], [t1].[NullableEnums], [t1].[c], [t1].[c0], [t1].[key0], [j0].[Id], [j0].[Name], [j0].[ParentId] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT [j].[Id], JSON_VALUE([o].[value], '$.SomethingSomething') AS [SomethingSomething], [o].[key], CAST([o].[key] AS int) AS [c] + FROM OPENJSON([j].[OwnedReferenceRoot], '$.OwnedReferenceBranch.OwnedCollectionLeaf') AS [o] + WHERE JSON_VALUE([o].[value], '$.SomethingSomething') <> N'Baz' OR JSON_VALUE([o].[value], '$.SomethingSomething') IS NULL +) AS [t] +OUTER APPLY ( + SELECT DISTINCT [j].[Id], [o0].[Name], [o0].[Names], [o0].[Number], [o0].[Numbers], [o0].[OwnedCollectionBranch] AS [c], [o0].[OwnedReferenceBranch] AS [c0] + FROM OPENJSON([j].[OwnedCollectionRoot], '$') WITH ( + [Name] nvarchar(max) '$.Name', + [Names] nvarchar(max) '$.Names' AS JSON, + [Number] int '$.Number', + [Numbers] nvarchar(max) '$.Numbers' AS JSON, + [OwnedCollectionBranch] nvarchar(max) '$.OwnedCollectionBranch' AS JSON, + [OwnedReferenceBranch] nvarchar(max) '$.OwnedReferenceBranch' AS JSON + ) AS [o0] +) AS [t0] +OUTER APPLY ( + SELECT [o1].[key], [t2].[Id], [t2].[Date], [t2].[Enum], [t2].[Enums], [t2].[Fraction], [t2].[NullableEnum], [t2].[NullableEnums], [t2].[c], [t2].[c0], [t2].[key] AS [key0], CAST([o1].[key] AS int) AS [c1], [t2].[c1] AS [c10] + FROM OPENJSON([j].[OwnedCollectionRoot], '$') AS [o1] + OUTER APPLY ( + SELECT [j].[Id], CAST(JSON_VALUE([o2].[value], '$.Date') AS datetime2) AS [Date], CAST(JSON_VALUE([o2].[value], '$.Enum') AS int) AS [Enum], JSON_QUERY([o2].[value], '$.Enums') AS [Enums], CAST(JSON_VALUE([o2].[value], '$.Fraction') AS decimal(18,2)) AS [Fraction], CAST(JSON_VALUE([o2].[value], '$.NullableEnum') AS int) AS [NullableEnum], JSON_QUERY([o2].[value], '$.NullableEnums') AS [NullableEnums], JSON_QUERY([o2].[value], '$.OwnedCollectionLeaf') AS [c], JSON_QUERY([o2].[value], '$.OwnedReferenceLeaf') AS [c0], [o2].[key], CAST([o2].[key] AS int) AS [c1] + FROM OPENJSON(JSON_QUERY([o1].[value], '$.OwnedCollectionBranch'), '$') AS [o2] + WHERE CAST(JSON_VALUE([o2].[value], '$.Date') AS datetime2) <> '2000-01-01T00:00:00.0000000' OR CAST(JSON_VALUE([o2].[value], '$.Date') AS datetime2) IS NULL + ) AS [t2] +) AS [t1] +LEFT JOIN [JsonEntitiesBasicForCollection] AS [j0] ON [j].[Id] = [j0].[ParentId] +ORDER BY [j].[Id], [t].[c], [t].[key], [t0].[Name], [t0].[Number], [t1].[c1], [t1].[key], [t1].[c10], [t1].[key0] +"""); + } + + public override async Task Json_branch_collection_distinct_and_other_collection(bool async) + { + await base.Json_branch_collection_distinct_and_other_collection(async); + + AssertSql( +""" +SELECT [j].[Id], [t].[Id], [t].[Date], [t].[Enum], [t].[Enums], [t].[Fraction], [t].[NullableEnum], [t].[NullableEnums], [t].[c], [t].[c0], [j0].[Id], [j0].[Name], [j0].[ParentId] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT DISTINCT [j].[Id], [o].[Date], [o].[Enum], [o].[Enums], [o].[Fraction], [o].[NullableEnum], [o].[NullableEnums], [o].[OwnedCollectionLeaf] AS [c], [o].[OwnedReferenceLeaf] AS [c0] + FROM OPENJSON([j].[OwnedReferenceRoot], '$.OwnedCollectionBranch') WITH ( + [Date] datetime2 '$.Date', + [Enum] int '$.Enum', + [Enums] nvarchar(max) '$.Enums' AS JSON, + [Fraction] decimal(18,2) '$.Fraction', + [NullableEnum] int '$.NullableEnum', + [NullableEnums] nvarchar(max) '$.NullableEnums' AS JSON, + [OwnedCollectionLeaf] nvarchar(max) '$.OwnedCollectionLeaf' AS JSON, + [OwnedReferenceLeaf] nvarchar(max) '$.OwnedReferenceLeaf' AS JSON + ) AS [o] +) AS [t] +LEFT JOIN [JsonEntitiesBasicForCollection] AS [j0] ON [j].[Id] = [j0].[ParentId] +ORDER BY [j].[Id], [t].[Date], [t].[Enum], [t].[Fraction], [t].[NullableEnum] +"""); + } + + public override async Task Json_leaf_collection_distinct_and_other_collection(bool async) + { + await base.Json_leaf_collection_distinct_and_other_collection(async); + + AssertSql( +""" +SELECT [j].[Id], [t].[Id], [t].[SomethingSomething], [j0].[Id], [j0].[Name], [j0].[ParentId] +FROM [JsonEntitiesBasic] AS [j] +OUTER APPLY ( + SELECT DISTINCT [j].[Id], [o].[SomethingSomething] + FROM OPENJSON([j].[OwnedReferenceRoot], '$.OwnedReferenceBranch.OwnedCollectionLeaf') WITH ([SomethingSomething] nvarchar(max) '$.SomethingSomething') AS [o] +) AS [t] +LEFT JOIN [JsonEntitiesBasicForCollection] AS [j0] ON [j].[Id] = [j0].[ParentId] +ORDER BY [j].[Id], [t].[SomethingSomething] +"""); } public override async Task Json_collection_SelectMany(bool async) { await base.Json_collection_SelectMany(async); - AssertSql(""); + AssertSql( +""" +SELECT [j].[Id], [o].[Name], [o].[Names], [o].[Number], [o].[Numbers], [o].[OwnedCollectionBranch], [o].[OwnedReferenceBranch] +FROM [JsonEntitiesBasic] AS [j] +CROSS APPLY OPENJSON([j].[OwnedCollectionRoot], '$') WITH ( + [Name] nvarchar(max) '$.Name', + [Names] nvarchar(max) '$.Names' AS JSON, + [Number] int '$.Number', + [Numbers] nvarchar(max) '$.Numbers' AS JSON, + [OwnedCollectionBranch] nvarchar(max) '$.OwnedCollectionBranch' AS JSON, + [OwnedReferenceBranch] nvarchar(max) '$.OwnedReferenceBranch' AS JSON +) AS [o] +"""); } public override async Task Json_nested_collection_SelectMany(bool async) { await base.Json_nested_collection_SelectMany(async); - AssertSql(""); + AssertSql( +""" +SELECT [j].[Id], [o].[Date], [o].[Enum], [o].[Enums], [o].[Fraction], [o].[NullableEnum], [o].[NullableEnums], [o].[OwnedCollectionLeaf], [o].[OwnedReferenceLeaf] +FROM [JsonEntitiesBasic] AS [j] +CROSS APPLY OPENJSON([j].[OwnedReferenceRoot], '$.OwnedCollectionBranch') WITH ( + [Date] datetime2 '$.Date', + [Enum] int '$.Enum', + [Enums] nvarchar(max) '$.Enums' AS JSON, + [Fraction] decimal(18,2) '$.Fraction', + [NullableEnum] int '$.NullableEnum', + [NullableEnums] nvarchar(max) '$.NullableEnums' AS JSON, + [OwnedCollectionLeaf] nvarchar(max) '$.OwnedCollectionLeaf' AS JSON, + [OwnedReferenceLeaf] nvarchar(max) '$.OwnedReferenceLeaf' AS JSON +) AS [o] +"""); } public override async Task Json_collection_of_primitives_SelectMany(bool async) diff --git a/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs index 46dca829102..f2627186dd7 100644 --- a/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs @@ -3,6 +3,8 @@ #nullable enable +using Microsoft.EntityFrameworkCore.Sqlite.Internal; + namespace Microsoft.EntityFrameworkCore; public class MaterializationInterceptionSqliteTest : MaterializationInterceptionTestBase, @@ -13,6 +15,13 @@ public MaterializationInterceptionSqliteTest(MaterializationInterceptionSqliteFi { } + public override async Task Intercept_query_materialization_with_owned_types_projecting_collection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Intercept_query_materialization_with_owned_types_projecting_collection(async))) + .Message); + public class SqliteLibraryContext : LibraryContext { public SqliteLibraryContext(DbContextOptions options) diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/JsonQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/JsonQuerySqliteTest.cs index 272558e3955..5f683ce48ef 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/JsonQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/JsonQuerySqliteTest.cs @@ -298,6 +298,83 @@ public override async Task Json_collection_skip_take_in_projection_with_json_ref () => base.Json_collection_skip_take_in_projection_with_json_reference_access_as_final_operation(async))) .Message); + public override async Task Json_collection_distinct_in_projection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_collection_distinct_in_projection(async))) + .Message); + + public override async Task Json_collection_filter_in_projection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_collection_filter_in_projection(async))) + .Message); + + public override async Task Json_collection_leaf_filter_in_projection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_collection_leaf_filter_in_projection(async))) + .Message); + + public override async Task Json_branch_collection_distinct_and_other_collection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_branch_collection_distinct_and_other_collection(async))) + .Message); + + public override async Task Json_leaf_collection_distinct_and_other_collection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_leaf_collection_distinct_and_other_collection(async))) + .Message); + + public override async Task Json_multiple_collection_projections(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_multiple_collection_projections(async))) + .Message); + + public override async Task Json_collection_SelectMany(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_collection_SelectMany(async))) + .Message); + + public override async Task Json_collection_skip_take_in_projection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_collection_skip_take_in_projection(async))) + .Message); + + public override async Task Json_nested_collection_anonymous_projection_in_projection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_nested_collection_anonymous_projection_in_projection(async))) + .Message); + + public override async Task Json_nested_collection_filter_in_projection(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_nested_collection_filter_in_projection(async))) + .Message); + + public override async Task Json_nested_collection_SelectMany(bool async) + => Assert.Equal( + SqliteStrings.ApplyNotSupported, + (await Assert.ThrowsAsync( + () => base.Json_nested_collection_SelectMany(async))) + .Message); + public override async Task Json_collection_index_in_projection_using_untranslatable_client_method(bool async) { var message = (await Assert.ThrowsAsync(