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(