diff --git a/src/EFCore.Relational/Diagnostics/RelationalEventId.cs b/src/EFCore.Relational/Diagnostics/RelationalEventId.cs
index 0e4524de932..2addb102a62 100644
--- a/src/EFCore.Relational/Diagnostics/RelationalEventId.cs
+++ b/src/EFCore.Relational/Diagnostics/RelationalEventId.cs
@@ -111,6 +111,7 @@ private enum Id
KeyPropertiesNotMappedToTable = CoreEventId.RelationalBaseId + 610,
StoredProcedureConcurrencyTokenNotMapped = CoreEventId.RelationalBaseId + 611,
TriggerOnNonRootTphEntity = CoreEventId.RelationalBaseId + 612,
+ OwnedEntityMappedToJsonCollectionWarning = CoreEventId.RelationalBaseId + 613,
// Update events
BatchReadyForExecution = CoreEventId.RelationalBaseId + 700,
@@ -1001,6 +1002,21 @@ private static EventId MakeValidationId(Id id)
public static readonly EventId TriggerOnNonRootTphEntity =
MakeValidationId(Id.TriggerOnNonRootTphEntity);
+ ///
+ /// An owned entity type is mapped to JSON as a collection, which uses a synthesized ordinal key. This mapping is obsolete; map
+ /// the type as a complex type collection instead.
+ ///
+ ///
+ ///
+ /// This event is in the category.
+ ///
+ ///
+ /// This event uses the payload when used with a .
+ ///
+ ///
+ public static readonly EventId OwnedEntityMappedToJsonCollectionWarning =
+ MakeValidationId(Id.OwnedEntityMappedToJsonCollectionWarning);
+
///
/// A foreign key specifies properties which don't map to the related tables.
///
diff --git a/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs b/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs
index aa99aec0dad..3ad8ca988d5 100644
--- a/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs
+++ b/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs
@@ -3386,6 +3386,40 @@ private static string TpcStoreGeneratedIdentity(EventDefinitionBase definition,
p.Property.Name);
}
+ ///
+ /// Logs the event.
+ ///
+ /// The diagnostics logger to use.
+ /// The owned entity type mapped to JSON as a collection.
+ public static void OwnedEntityMappedToJsonCollectionWarning(
+ this IDiagnosticsLogger diagnostics,
+ IEntityType entityType)
+ {
+ var definition = RelationalResources.LogOwnedEntityMappedToJsonCollection(diagnostics);
+
+ if (diagnostics.ShouldLog(definition))
+ {
+ definition.Log(diagnostics, entityType.DisplayName());
+ }
+
+ if (diagnostics.NeedsEventData(definition, out var diagnosticSourceEnabled, out var simpleLogEnabled))
+ {
+ var eventData = new EntityTypeEventData(
+ definition,
+ OwnedEntityMappedToJsonCollectionWarning,
+ entityType);
+
+ diagnostics.DispatchEventData(definition, eventData, diagnosticSourceEnabled, simpleLogEnabled);
+ }
+ }
+
+ private static string OwnedEntityMappedToJsonCollectionWarning(EventDefinitionBase definition, EventData payload)
+ {
+ var d = (EventDefinition)definition;
+ var p = (EntityTypeEventData)payload;
+ return d.GenerateMessage(p.EntityType.DisplayName());
+ }
+
///
/// Logs the event.
///
diff --git a/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs b/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs
index b5b0ac63723..90448b21c7b 100644
--- a/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs
+++ b/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs
@@ -601,6 +601,15 @@ public abstract class RelationalLoggingDefinitions : LoggingDefinitions
[EntityFrameworkInternal]
public EventDefinitionBase? LogTpcStoreGeneratedIdentity;
+ ///
+ /// 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.
+ ///
+ [EntityFrameworkInternal]
+ public EventDefinitionBase? LogOwnedEntityMappedToJsonCollection;
+
///
/// 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
diff --git a/src/EFCore.Relational/EFCore.Relational.baseline.json b/src/EFCore.Relational/EFCore.Relational.baseline.json
index 839b3dde8e8..0b5cecb11f9 100644
--- a/src/EFCore.Relational/EFCore.Relational.baseline.json
+++ b/src/EFCore.Relational/EFCore.Relational.baseline.json
@@ -12756,6 +12756,9 @@
{
"Member": "static readonly Microsoft.Extensions.Logging.EventId OptionalDependentWithoutIdentifyingPropertyWarning"
},
+ {
+ "Member": "static readonly Microsoft.Extensions.Logging.EventId OwnedEntityMappedToJsonCollectionWarning"
+ },
{
"Member": "static readonly Microsoft.Extensions.Logging.EventId PendingModelChangesWarning"
},
@@ -13486,6 +13489,9 @@
{
"Member": "static void OptionalDependentWithoutIdentifyingPropertyWarning(this Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger diagnostics, Microsoft.EntityFrameworkCore.Metadata.IEntityType entityType);"
},
+ {
+ "Member": "static void OwnedEntityMappedToJsonCollectionWarning(this Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger diagnostics, Microsoft.EntityFrameworkCore.Metadata.IEntityType entityType);"
+ },
{
"Member": "static void PendingModelChangesWarning(this Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger diagnostics, System.Type contextType);"
},
@@ -14239,6 +14245,9 @@
{
"Member": "virtual void ValidateOptionalDependents(System.Collections.Generic.IReadOnlyList mappedTypes, in Microsoft.EntityFrameworkCore.Metadata.StoreObjectIdentifier table, Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger logger);"
},
+ {
+ "Member": "virtual void ValidateOwnedEntityMappedToJsonCollection(Microsoft.EntityFrameworkCore.Metadata.IEntityType entityType, Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger logger);"
+ },
{
"Member": "override void ValidatePrimitiveCollection(Microsoft.EntityFrameworkCore.Metadata.IProperty property, Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger logger);"
},
diff --git a/src/EFCore.Relational/Extensions/RelationalOwnedNavigationBuilderExtensions.cs b/src/EFCore.Relational/Extensions/RelationalOwnedNavigationBuilderExtensions.cs
index 2f7ea94c50a..e4444a28bae 100644
--- a/src/EFCore.Relational/Extensions/RelationalOwnedNavigationBuilderExtensions.cs
+++ b/src/EFCore.Relational/Extensions/RelationalOwnedNavigationBuilderExtensions.cs
@@ -22,7 +22,6 @@ public static class RelationalOwnedNavigationBuilderExtensions
///
/// The builder for the owned navigation being configured.
/// The same builder instance so that multiple calls can be chained.
- [Obsolete(EFDiagnostics.OwnedJsonObsoleteMessage, DiagnosticId = EFDiagnostics.OwnedJsonObsolete)]
public static OwnedNavigationBuilder ToJson(this OwnedNavigationBuilder builder)
=> builder.ToJson(builder.Metadata.GetNavigation(pointsToPrincipal: false)!.Name);
@@ -37,7 +36,6 @@ public static OwnedNavigationBuilder ToJson(this OwnedNavigationBuilder builder)
///
/// The builder for the owned navigation being configured.
/// The same builder instance so that multiple calls can be chained.
- [Obsolete(EFDiagnostics.OwnedJsonObsoleteMessage, DiagnosticId = EFDiagnostics.OwnedJsonObsolete)]
public static OwnedNavigationBuilder ToJson(
this OwnedNavigationBuilder builder)
where TOwnerEntity : class
@@ -55,7 +53,6 @@ public static OwnedNavigationBuilder ToJsonThe builder for the owned navigation being configured.
/// JSON column name to use.
/// The same builder instance so that multiple calls can be chained.
- [Obsolete(EFDiagnostics.OwnedJsonObsoleteMessage, DiagnosticId = EFDiagnostics.OwnedJsonObsolete)]
public static OwnedNavigationBuilder ToJson(
this OwnedNavigationBuilder builder,
string? jsonColumnName)
@@ -74,7 +71,6 @@ public static OwnedNavigationBuilder ToJsonThe builder for the owned navigation being configured.
/// JSON column name to use.
/// The same builder instance so that multiple calls can be chained.
- [Obsolete(EFDiagnostics.OwnedJsonObsoleteMessage, DiagnosticId = EFDiagnostics.OwnedJsonObsolete)]
public static OwnedNavigationBuilder ToJson(
this OwnedNavigationBuilder builder,
string? jsonColumnName)
diff --git a/src/EFCore.Relational/Infrastructure/RelationalModelValidator.cs b/src/EFCore.Relational/Infrastructure/RelationalModelValidator.cs
index e458d4713de..8229134d304 100644
--- a/src/EFCore.Relational/Infrastructure/RelationalModelValidator.cs
+++ b/src/EFCore.Relational/Infrastructure/RelationalModelValidator.cs
@@ -139,10 +139,29 @@ protected override void ValidateEntityType(
ValidateStoredProcedures(entityType, logger);
ValidateContainerColumnType(entityType, logger);
ValidateTphTriggers(entityType, logger);
+ ValidateOwnedEntityMappedToJsonCollection(entityType, logger);
// TODO: support this for raw SQL and function mappings in #19970 and #21627 and remove the check
ValidateJsonEntityOwnerMappedToTableOrView(entityType, logger);
}
+ ///
+ /// Logs a warning if an owned entity type is mapped to JSON as a collection, which uses a synthesized ordinal key. This mapping
+ /// is obsolete; the type should be mapped as a complex type collection instead.
+ ///
+ /// The entity type to validate.
+ /// The logger to use.
+ protected virtual void ValidateOwnedEntityMappedToJsonCollection(
+ IEntityType entityType,
+ IDiagnosticsLogger logger)
+ {
+ if (entityType.IsMappedToJson()
+ && entityType.FindPrimaryKey() is { } primaryKey
+ && primaryKey.Properties.Any(p => p.IsOrdinalKeyProperty()))
+ {
+ logger.OwnedEntityMappedToJsonCollectionWarning(entityType);
+ }
+ }
+
///
/// Logs a warning if triggers are defined on a non-root entity type using TPH mapping strategy.
///
diff --git a/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs b/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs
index 20fd3df7c4a..c46d19e7915 100644
--- a/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs
+++ b/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs
@@ -4094,6 +4094,31 @@ public static EventDefinition LogOptionalDependentWithoutIdentifyingProp
return (EventDefinition)definition;
}
+ ///
+ /// The entity type '{entityType}' is an owned entity type mapped to JSON as a collection, which uses a synthesized ordinal key. Mapping owned entity collections to JSON is obsolete; map it as a complex type collection or configure a non-shadow key instead. See https://aka.ms/efcore-docs-json-owned-entities for more information.
+ ///
+ public static EventDefinition LogOwnedEntityMappedToJsonCollection(IDiagnosticsLogger logger)
+ {
+ var definition = ((RelationalLoggingDefinitions)logger.Definitions).LogOwnedEntityMappedToJsonCollection;
+ if (definition == null)
+ {
+ definition = NonCapturingLazyInitializer.EnsureInitialized(
+ ref ((RelationalLoggingDefinitions)logger.Definitions).LogOwnedEntityMappedToJsonCollection,
+ logger,
+ static logger => new EventDefinition(
+ logger.Options,
+ RelationalEventId.OwnedEntityMappedToJsonCollectionWarning,
+ LogLevel.Warning,
+ "RelationalEventId.OwnedEntityMappedToJsonCollectionWarning",
+ level => LoggerMessage.Define(
+ level,
+ RelationalEventId.OwnedEntityMappedToJsonCollectionWarning,
+ _resourceManager.GetString("LogOwnedEntityMappedToJsonCollection")!)));
+ }
+
+ return (EventDefinition)definition;
+ }
+
///
/// The model for context '{contextType}' has pending changes. Add a new migration before updating the database. See https://aka.ms/efcore-docs-pending-changes.
///
diff --git a/src/EFCore.Relational/Properties/RelationalStrings.resx b/src/EFCore.Relational/Properties/RelationalStrings.resx
index 0d99a1ed26b..b6a1fdee278 100644
--- a/src/EFCore.Relational/Properties/RelationalStrings.resx
+++ b/src/EFCore.Relational/Properties/RelationalStrings.resx
@@ -926,6 +926,10 @@
The entity type '{entityType}' is an optional dependent using table sharing without any required non shared column that could be used to identify whether the entity exists. If all nullable properties contain a 'null' value in database then an object instance won't be created in the query. Add a required property to create instances with 'null' values for other properties or mark the incoming navigation as required to always create an instance.
Warning RelationalEventId.OptionalDependentWithoutIdentifyingPropertyWarning string
+
+ The entity type '{entityType}' is an owned entity type mapped to JSON as a collection, which uses a synthesized ordinal key. Mapping owned entity collections to JSON is obsolete; map it as a complex type collection or configure a non-shadow key instead. See https://aka.ms/efcore-docs-json-owned-entities for more information.
+ Warning RelationalEventId.OwnedEntityMappedToJsonCollectionWarning string
+
The model for context '{contextType}' has pending changes. Add a new migration before updating the database. See https://aka.ms/efcore-docs-pending-changes.
Error RelationalEventId.PendingModelChangesWarning string
diff --git a/src/Shared/EFDiagnostics.cs b/src/Shared/EFDiagnostics.cs
index bad108a8c20..e7dde3ab365 100644
--- a/src/Shared/EFDiagnostics.cs
+++ b/src/Shared/EFDiagnostics.cs
@@ -14,10 +14,6 @@ internal static class EFDiagnostics
internal const string ToAsyncEnumerableOnQueryable = "EF1004";
internal const string SuppressUninitializedDbSetRule = "EFSPR1001";
- // Diagnostics for [Obsolete]
- internal const string OwnedJsonObsolete = "EF8001";
- internal const string OwnedJsonObsoleteMessage = "ToJson() on owned entities has been obsoleted, please switch to using complex types instead for mapping to JSON. See https://aka.ms/efcore-docs-json-owned-entities for more information, and provide feedback on https://github.com/dotnet/efcore/issues/37290 if the transition causes problems for you.";
-
// Diagnostics for [Experimental]
internal const string ExperimentalApi = "EF9001";
internal const string ProviderExperimentalApi = "EF9002";
diff --git a/test/EFCore.Design.Tests/Migrations/Design/CSharpMigrationsGeneratorTest.ModelSnapshot.cs b/test/EFCore.Design.Tests/Migrations/Design/CSharpMigrationsGeneratorTest.ModelSnapshot.cs
index 7918cb909a0..ccc47ab78c3 100644
--- a/test/EFCore.Design.Tests/Migrations/Design/CSharpMigrationsGeneratorTest.ModelSnapshot.cs
+++ b/test/EFCore.Design.Tests/Migrations/Design/CSharpMigrationsGeneratorTest.ModelSnapshot.cs
@@ -4533,7 +4533,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Assert.NotNull(testOwnee.FindCheckConstraint("CK_TestOwnee_TestEnum_Enum_Constraint"));
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Owned_types_mapped_to_json_are_stored_in_snapshot()
=> Test(
@@ -4772,7 +4771,6 @@ public virtual void Owned_types_mapped_to_json_with_explicit_column_type_are_sto
Assert.Equal("EntityWithTwoProperties", ownedType1.GetContainerColumnName());
Assert.Equal("json", ownedType1.GetContainerColumnType());
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
private class Order
{
diff --git a/test/EFCore.Relational.Specification.Tests/ComplexTypesTrackingRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/ComplexTypesTrackingRelationalTestBase.cs
index c75e6b141b7..231735232af 100644
--- a/test/EFCore.Relational.Specification.Tests/ComplexTypesTrackingRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/ComplexTypesTrackingRelationalTestBase.cs
@@ -21,7 +21,6 @@ public abstract class RelationalFixtureBase : FixtureBase
public TestSqlLoggerFactory TestSqlLoggerFactory
=> (TestSqlLoggerFactory)ListLoggerFactory;
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context)
{
base.OnModelCreating(modelBuilder, context);
@@ -86,6 +85,5 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
});
}
}
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
}
}
diff --git a/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs b/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs
index 1914e82d714..8a3ef900e46 100644
--- a/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs
@@ -232,7 +232,6 @@ public virtual Task Create_table_with_computed_column(bool? stored)
}
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual async Task Create_table_with_json_column()
=> await Test(
@@ -473,7 +472,6 @@ public virtual async Task Create_table_with_complex_properties_with_nested_colle
table.Columns.Single(c => c.Name == "Id"),
Assert.Single(table.PrimaryKey!.Columns));
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual Task Alter_table_add_comment()
@@ -571,7 +569,6 @@ public virtual Task Rename_table_with_primary_key()
Assert.Equal("Persons", table.Name);
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual async Task Rename_table_with_json_column()
=> await Test(
@@ -664,7 +661,6 @@ public virtual async Task Rename_table_with_json_column()
table.Columns.Single(c => c.Name == "Id"),
Assert.Single(table.PrimaryKey!.Columns));
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual Task Move_table()
@@ -781,7 +777,6 @@ protected class Owned
public int Foo { get; set; }
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual async Task Add_json_columns_to_existing_table()
=> await Test(
@@ -869,7 +864,6 @@ public virtual async Task Add_json_columns_to_existing_table()
table.Columns.Single(c => c.Name == "Id"),
Assert.Single(table.PrimaryKey!.Columns));
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Theory, InlineData(true), InlineData(false), InlineData(null)]
public virtual Task Add_column_with_computedSql(bool? stored)
@@ -1435,7 +1429,6 @@ public virtual Task Alter_column_reset_collation()
Assert.Null(nameColumn.Collation);
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual async Task Convert_json_entities_to_regular_owned()
=> await Test(
@@ -1732,7 +1725,6 @@ await Test(
AssertSql();
}
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual Task Drop_column()
@@ -1780,7 +1772,6 @@ public virtual Task Drop_column_computed_and_non_computed_with_dependency()
Assert.Equal("Id", Assert.Single(table.Columns).Name);
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual async Task Drop_json_columns_from_existing_table()
=> await Test(
@@ -1847,7 +1838,6 @@ public virtual async Task Drop_json_columns_from_existing_table()
table.Columns.Single(c => c.Name == "Id"),
Assert.Single(table.PrimaryKey!.Columns));
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual Task Rename_column()
@@ -1862,7 +1852,6 @@ public virtual Task Rename_column()
Assert.Single(table.Columns, c => c.Name == "SomeOtherColumn");
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual async Task Rename_json_column()
=> await Test(
@@ -1953,7 +1942,6 @@ public virtual async Task Rename_json_column()
table.Columns.Single(c => c.Name == "Id"),
Assert.Single(table.PrimaryKey!.Columns));
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual Task Create_index()
diff --git a/test/EFCore.Relational.Specification.Tests/ModelBuilding/RelationalTestModelBuilderExtensions.cs b/test/EFCore.Relational.Specification.Tests/ModelBuilding/RelationalTestModelBuilderExtensions.cs
index 23e749090a7..cbdfdc4573d 100644
--- a/test/EFCore.Relational.Specification.Tests/ModelBuilding/RelationalTestModelBuilderExtensions.cs
+++ b/test/EFCore.Relational.Specification.Tests/ModelBuilding/RelationalTestModelBuilderExtensions.cs
@@ -1487,7 +1487,6 @@ public static ModelBuilderTest.TestEntityTypeBuilder DeleteUsingStoredP
return builder;
}
- [Obsolete(EFDiagnostics.OwnedJsonObsoleteMessage, DiagnosticId = EFDiagnostics.OwnedJsonObsolete)]
public static ModelBuilderTest.TestOwnedNavigationBuilder ToJson(
this ModelBuilderTest.TestOwnedNavigationBuilder builder)
where TOwnerEntity : class
@@ -1506,7 +1505,6 @@ public static ModelBuilderTest.TestOwnedNavigationBuilder ToJson(
this ModelBuilderTest.TestOwnedNavigationBuilder builder,
string? jsonColumnName)
diff --git a/test/EFCore.Relational.Specification.Tests/PropertyValuesRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/PropertyValuesRelationalTestBase.cs
index c6dae38a70d..54876947703 100644
--- a/test/EFCore.Relational.Specification.Tests/PropertyValuesRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/PropertyValuesRelationalTestBase.cs
@@ -4,7 +4,6 @@
namespace Microsoft.EntityFrameworkCore;
#nullable disable
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
public abstract class PropertyValuesRelationalTestBase(TFixture fixture)
: PropertyValuesTestBase(fixture)
diff --git a/test/EFCore.Relational.Specification.Tests/Query/AdHocJsonQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/AdHocJsonQueryRelationalTestBase.cs
index 38360c1370a..4296cec05f7 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/AdHocJsonQueryRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/AdHocJsonQueryRelationalTestBase.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
using System.Text.Json;
@@ -11,6 +10,13 @@ namespace Microsoft.EntityFrameworkCore.Query;
public abstract class AdHocJsonQueryRelationalTestBase(NonSharedFixture fixture) : AdHocJsonQueryTestBase(fixture)
{
+ protected override void ConfigureWarnings(WarningsConfigurationBuilder builder)
+ {
+ base.ConfigureWarnings(builder);
+
+ builder.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning);
+ }
+
#region 21006
public override async Task Project_missing_required_navigation(bool async)
diff --git a/test/EFCore.Relational.Specification.Tests/Query/AdHocPrecompiledQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/AdHocPrecompiledQueryRelationalTestBase.cs
index d6f5b60563f..94844f365ba 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/AdHocPrecompiledQueryRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/AdHocPrecompiledQueryRelationalTestBase.cs
@@ -66,7 +66,6 @@ await Test(
options);
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
public class JsonContext(DbContextOptions options) : DbContext(options)
{
public DbSet JsonEntities { get; set; } = null!;
@@ -74,7 +73,6 @@ public class JsonContext(DbContextOptions options) : DbContext(options)
protected override void OnModelCreating(ModelBuilder modelBuilder)
=> modelBuilder.Entity().OwnsOne(j => j.JsonThing, n => n.ToJson());
}
-#pragma warning restore EF8001
public class JsonEntity
{
diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonRelationalFixtureBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonRelationalFixtureBase.cs
index ec92a671115..c4ca8506923 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonRelationalFixtureBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonRelationalFixtureBase.cs
@@ -5,7 +5,6 @@
namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedJson;
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
public abstract class OwnedJsonRelationalFixtureBase : OwnedNavigationsFixtureBase, ITestSqlLoggerFactory
{
@@ -29,4 +28,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
public TestSqlLoggerFactory TestSqlLoggerFactory
=> (TestSqlLoggerFactory)ListLoggerFactory;
+
+ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder)
+ => base.AddOptions(builder).ConfigureWarnings(w => w.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
}
diff --git a/test/EFCore.Relational.Specification.Tests/Query/JsonQueryRelationalFixture.cs b/test/EFCore.Relational.Specification.Tests/Query/JsonQueryRelationalFixture.cs
index b69eec919fe..eab4f8c97c9 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/JsonQueryRelationalFixture.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/JsonQueryRelationalFixture.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
using Microsoft.EntityFrameworkCore.TestModels.JsonQuery;
@@ -17,6 +16,9 @@ public abstract class JsonQueryRelationalFixture : JsonQueryFixtureBase, ITestSq
public TestSqlLoggerFactory TestSqlLoggerFactory
=> (TestSqlLoggerFactory)ListLoggerFactory;
+ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder)
+ => base.AddOptions(builder).ConfigureWarnings(w => w.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
+
protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context)
{
base.OnModelCreating(modelBuilder, context);
diff --git a/test/EFCore.Relational.Specification.Tests/Query/OperatorsQueryTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/OperatorsQueryTestBase.cs
index 3999f832f82..9ca0584ac23 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/OperatorsQueryTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/OperatorsQueryTestBase.cs
@@ -311,7 +311,6 @@ public virtual async Task Negate_on_like_expression(bool async)
}
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Theory, MemberData(nameof(IsAsyncData))]
public virtual async Task Concat_and_json_scalar(bool async)
{
@@ -332,7 +331,6 @@ public virtual async Task Concat_and_json_scalar(bool async)
var result = await context.Set().SingleAsync(o => "Foo" + o.Owned.SomeProperty == "FooBar");
Assert.Equal("Bar", result.Owned.SomeProperty);
}
-#pragma warning restore EF8001
private class Owner
{
diff --git a/test/EFCore.Relational.Specification.Tests/Query/OptionalDependentQueryFixtureBase.cs b/test/EFCore.Relational.Specification.Tests/Query/OptionalDependentQueryFixtureBase.cs
index 60338e58dd2..a20ff05b4dd 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/OptionalDependentQueryFixtureBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/OptionalDependentQueryFixtureBase.cs
@@ -132,7 +132,6 @@ public TestSqlLoggerFactory TestSqlLoggerFactory
protected override Task SeedAsync(OptionalDependentContext context)
=> OptionalDependentContext.SeedAsync(context);
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context)
{
modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever();
@@ -161,5 +160,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
b.Navigation(x => x.ReqNav2).IsRequired();
});
}
-#pragma warning restore EF8001
}
diff --git a/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalFixture.cs b/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalFixture.cs
index f5067aff115..f0e9a5fe223 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalFixture.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalFixture.cs
@@ -16,6 +16,10 @@ public abstract class PrecompiledQueryRelationalFixture
protected override string StoreName
=> "PrecompiledQueryTest";
+ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder)
+ => base.AddOptions(builder)
+ .ConfigureWarnings(w => w.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
+
public TestSqlLoggerFactory TestSqlLoggerFactory
=> (TestSqlLoggerFactory)ListLoggerFactory;
diff --git a/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalTestBase.cs
index 30e92880bef..54bec0d52eb 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalTestBase.cs
@@ -1225,7 +1225,6 @@ public class PrecompiledQueryContext(DbContextOptions options) : DbContext(optio
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
modelBuilder.Entity().OwnsMany(
x => x.Json,
n =>
@@ -1233,7 +1232,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
n.ToJson();
n.OwnsOne(xx => xx.Inner);
});
-#pragma warning restore EF8001
modelBuilder.Entity().HasMany(x => x.Posts).WithOne(x => x.Blog).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever();
}
diff --git a/test/EFCore.Relational.Specification.Tests/Query/PrimitiveCollectionsQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/PrimitiveCollectionsQueryRelationalTestBase.cs
index 485819db459..2d4386715f1 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/PrimitiveCollectionsQueryRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/PrimitiveCollectionsQueryRelationalTestBase.cs
@@ -211,7 +211,6 @@ public virtual async Task Parameter_collection_Contains_parameter_bucketization(
Assert.Equivalent(new[] { 2 }, result);
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual async Task Column_collection_inside_json_owned_entity()
{
@@ -233,7 +232,6 @@ public virtual async Task Column_collection_inside_json_owned_entity()
result = await context.Set().SingleAsync(o => o.Owned.Strings[1] == "bar");
Assert.Equivalent(new[] { "foo", "bar" }, result.Owned.Strings);
}
-#pragma warning restore EF8001
public override Task Column_collection_Concat_parameter_collection_equality_inline_collection()
=> AssertTranslationFailed(base.Column_collection_Concat_parameter_collection_equality_inline_collection);
diff --git a/test/EFCore.Relational.Specification.Tests/Query/Translations/JsonTranslationsRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Translations/JsonTranslationsRelationalTestBase.cs
index 0e22da8d499..12303d9f37f 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/Translations/JsonTranslationsRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/Translations/JsonTranslationsRelationalTestBase.cs
@@ -68,9 +68,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity(b =>
{
b.ComplexProperty(j => j.JsonComplexType, j => j.ToJson());
-#pragma warning disable EF8001 // ToJson() on owned entities is obsolete
b.OwnsOne(j => j.JsonOwnedType, j => j.ToJson());
-#pragma warning restore EF8001
});
}
}
diff --git a/test/EFCore.Relational.Specification.Tests/Scaffolding/CompiledModelRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Scaffolding/CompiledModelRelationalTestBase.cs
index 81c430fe82a..11454267734 100644
--- a/test/EFCore.Relational.Specification.Tests/Scaffolding/CompiledModelRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Scaffolding/CompiledModelRelationalTestBase.cs
@@ -44,9 +44,7 @@ protected override void BuildBigModel(ModelBuilder modelBuilder, bool jsonColumn
if (jsonColumns)
{
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
ob.ToJson();
-#pragma warning restore EF8001
}
else
{
@@ -71,9 +69,7 @@ protected override void BuildBigModel(ModelBuilder modelBuilder, bool jsonColumn
{
if (jsonColumns)
{
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
ob.ToJson();
-#pragma warning restore EF8001
}
else
{
@@ -1545,5 +1541,8 @@ protected override BuildSource AddReferences(BuildSource build, [CallerFilePath]
protected override DbContextOptionsBuilder AddNonSharedOptions(DbContextOptionsBuilder builder)
=> base.AddNonSharedOptions(builder)
- .ConfigureWarnings(w => w.Ignore(RelationalEventId.ForeignKeyTpcPrincipalWarning));
+ .ConfigureWarnings(
+ w => w.Ignore(
+ RelationalEventId.ForeignKeyTpcPrincipalWarning,
+ RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
}
diff --git a/test/EFCore.Relational.Specification.Tests/Update/JsonUpdateFixtureBase.cs b/test/EFCore.Relational.Specification.Tests/Update/JsonUpdateFixtureBase.cs
index 58e37c1491b..fd9ce49dd80 100644
--- a/test/EFCore.Relational.Specification.Tests/Update/JsonUpdateFixtureBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Update/JsonUpdateFixtureBase.cs
@@ -7,7 +7,6 @@ namespace Microsoft.EntityFrameworkCore.Update;
#nullable disable
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
public abstract class JsonUpdateFixtureBase : SharedStoreFixtureBase
{
@@ -17,6 +16,9 @@ protected override string StoreName
public TestSqlLoggerFactory TestSqlLoggerFactory
=> (TestSqlLoggerFactory)ListLoggerFactory;
+ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder)
+ => base.AddOptions(builder).ConfigureWarnings(w => w.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
+
protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context)
{
modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever();
diff --git a/test/EFCore.Relational.Tests/Infrastructure/RelationalModelValidatorTest.Json.cs b/test/EFCore.Relational.Tests/Infrastructure/RelationalModelValidatorTest.Json.cs
index fbea89831f3..1e470702b18 100644
--- a/test/EFCore.Relational.Tests/Infrastructure/RelationalModelValidatorTest.Json.cs
+++ b/test/EFCore.Relational.Tests/Infrastructure/RelationalModelValidatorTest.Json.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
namespace Microsoft.EntityFrameworkCore.Infrastructure;
diff --git a/test/EFCore.Relational.Tests/Metadata/Conventions/TableSharingConcurrencyTokenConventionTest.cs b/test/EFCore.Relational.Tests/Metadata/Conventions/TableSharingConcurrencyTokenConventionTest.cs
index c40d81656fd..f0ada871834 100644
--- a/test/EFCore.Relational.Tests/Metadata/Conventions/TableSharingConcurrencyTokenConventionTest.cs
+++ b/test/EFCore.Relational.Tests/Metadata/Conventions/TableSharingConcurrencyTokenConventionTest.cs
@@ -202,7 +202,6 @@ public virtual void Concurrency_token_property_is_not_created_on_the_sharing_whe
Assert.All(animalEntityType.GetProperties(), p => Assert.NotEqual(typeof(byte[]), p.ClrType));
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Missing_concurrency_token_property_is_not_created_for_json_mapped_entity()
{
@@ -234,7 +233,6 @@ public virtual void Missing_concurrency_token_property_is_not_created_for_json_m
ownedEntity.GetProperties(),
p => p.Name.StartsWith("_TableSharingConcurrencyTokenConvention"));
}
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
protected abstract class BaseEntity
{
diff --git a/test/EFCore.Relational.Tests/Metadata/RelationalModelTest.cs b/test/EFCore.Relational.Tests/Metadata/RelationalModelTest.cs
index 991f7649b76..06184f4b8ee 100644
--- a/test/EFCore.Relational.Tests/Metadata/RelationalModelTest.cs
+++ b/test/EFCore.Relational.Tests/Metadata/RelationalModelTest.cs
@@ -3332,10 +3332,8 @@ public void Json_element_tree_is_built_for_owned_entity_json_columns()
cb.Ignore(c => c.ComplexProperty);
cb.Ignore(c => c.Details);
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
cb.OwnsOne(c => c.DateDetails, o => o.ToJson("date_details"));
cb.OwnsMany(c => c.Addresses, o => o.ToJson("addresses"));
-#pragma warning restore EF8001
});
var model = Finalize(modelBuilder);
@@ -3531,7 +3529,6 @@ public void Json_element_tree_is_built_for_primitive_collection_columns()
modelBuilder.Entity(eb =>
{
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
eb.OwnsOne(
e => e.OwnedWithTags,
b =>
@@ -3551,7 +3548,6 @@ public void Json_element_tree_is_built_for_primitive_collection_columns()
elementMapping: new IntTypeMapping("int")));
enumValues.ElementType(b => b.HasConversion());
});
-#pragma warning restore EF8001
});
var model = Finalize(modelBuilder);
@@ -3613,10 +3609,8 @@ public void Can_use_relational_model_with_functions_and_json_owned_types()
cb.Ignore(c => c.Details);
cb.Ignore(c => c.ComplexProperty);
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
cb.OwnsOne(c => c.DateDetails, o => o.ToJson("date_details"));
cb.OwnsMany(c => c.Addresses, o => o.ToJson("addresses"));
-#pragma warning restore EF8001
});
modelBuilder.HasDbFunction(
@@ -3797,7 +3791,8 @@ protected virtual TestHelpers.TestModelBuilder CreateConventionModelBuilder()
configureContext: b =>
b.ConfigureWarnings(w => w.Default(WarningBehavior.Throw)
.Ignore(RelationalEventId.ForeignKeyTpcPrincipalWarning)
- .Ignore(RelationalEventId.AllIndexPropertiesNotMappedToAnyTable)));
+ .Ignore(RelationalEventId.AllIndexPropertiesNotMappedToAnyTable)
+ .Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning)));
public static void AssertEqual(IRelationalModel expectedModel, IRelationalModel actualModel)
=> RelationalModelAsserter.Instance.AssertEqual(expectedModel, actualModel);
diff --git a/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs b/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs
index 6b7ef5ecded..89b7942710f 100644
--- a/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs
+++ b/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs
@@ -9903,7 +9903,6 @@ public class AccountHolder
{
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Convert_table_from_owned_to_complex_properties_mapped_to_json()
=> Execute(
@@ -10005,7 +10004,6 @@ public virtual void Convert_table_from_owned_to_complex_properties_mapped_to_jso
});
},
Assert.Empty);
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Add_complex_collection_mapped_to_json_uses_empty_array_as_default_value()
@@ -10101,7 +10099,6 @@ public virtual void Add_complex_reference_with_nested_collection_mapped_to_json_
Assert.IsType(downOps[0]);
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Add_owned_collection_mapped_to_json_has_nullable_column()
=> Execute(
@@ -10148,9 +10145,7 @@ public virtual void Add_owned_collection_mapped_to_json_has_nullable_column()
Assert.Equal(1, downOps.Count);
Assert.IsType(downOps[0]);
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Add_owned_reference_with_nested_collection_mapped_to_json_uses_empty_object_as_default_value()
=> Execute(
@@ -10201,7 +10196,6 @@ public virtual void Add_owned_reference_with_nested_collection_mapped_to_json_us
Assert.Equal(1, downOps.Count);
Assert.IsType(downOps[0]);
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Noop_on_complex_properties()
diff --git a/test/EFCore.Specification.Tests/Query/AdHocJsonQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/AdHocJsonQueryTestBase.cs
index ebb1323a90f..1ea059aa26e 100644
--- a/test/EFCore.Specification.Tests/Query/AdHocJsonQueryTestBase.cs
+++ b/test/EFCore.Specification.Tests/Query/AdHocJsonQueryTestBase.cs
@@ -783,7 +783,8 @@ public class SubRound
[Fact]
public virtual async Task Project_entity_with_json_null_values()
{
- var contextFactory = await InitializeNonSharedTest(seed: Seed34960, onModelCreating: OnModelCreating34960);
+ var contextFactory = await InitializeNonSharedTest(
+ seed: Seed34960, onModelCreating: OnModelCreating34960, onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings));
using var context = contextFactory.CreateDbContext();
var query = await context.Entities.ToListAsync();
@@ -792,7 +793,8 @@ public virtual async Task Project_entity_with_json_null_values()
[Fact]
public virtual async Task Try_project_collection_but_JSON_is_entity()
{
- var contextFactory = await InitializeNonSharedTest(seed: Seed34960, onModelCreating: OnModelCreating34960);
+ var contextFactory = await InitializeNonSharedTest(
+ seed: Seed34960, onModelCreating: OnModelCreating34960, onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings));
using var context = contextFactory.CreateDbContext();
await context.Junk.AsNoTracking().Where(x => x.Id == 1).Select(x => x.Collection).FirstOrDefaultAsync();
@@ -801,7 +803,8 @@ public virtual async Task Try_project_collection_but_JSON_is_entity()
[Fact]
public virtual async Task Try_project_reference_but_JSON_is_collection()
{
- var contextFactory = await InitializeNonSharedTest(seed: Seed34960, onModelCreating: OnModelCreating34960);
+ var contextFactory = await InitializeNonSharedTest(
+ seed: Seed34960, onModelCreating: OnModelCreating34960, onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings));
using var context = contextFactory.CreateDbContext();
await context.Junk.AsNoTracking().Where(x => x.Id == 2).Select(x => x.Reference).FirstOrDefaultAsync();
diff --git a/test/EFCore.Specification.Tests/TestUtilities/BuildSource.cs b/test/EFCore.Specification.Tests/TestUtilities/BuildSource.cs
index 56a5f635c32..6f301d04b5e 100644
--- a/test/EFCore.Specification.Tests/TestUtilities/BuildSource.cs
+++ b/test/EFCore.Specification.Tests/TestUtilities/BuildSource.cs
@@ -197,9 +197,6 @@ private CSharpCompilationOptions CreateOptions()
{ "CS1705", ReportDiagnostic.Suppress },
// Unnecessary using directive.
- { "CS8019", ReportDiagnostic.Suppress },
-
- // Owned JSON entities are obsolete
- { "EF8001", ReportDiagnostic.Suppress }
+ { "CS8019", ReportDiagnostic.Suppress }
});
}
diff --git a/test/EFCore.SqlServer.FunctionalTests/MaterializationInterceptionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/MaterializationInterceptionSqlServerTest.cs
index 5ec9ae22a91..15ecb257a1d 100644
--- a/test/EFCore.SqlServer.FunctionalTests/MaterializationInterceptionSqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/MaterializationInterceptionSqlServerTest.cs
@@ -8,16 +8,18 @@ public class MaterializationInterceptionSqlServerTest(NonSharedFixture fixture)
{
public class SqlServerLibraryContext(DbContextOptions options) : LibraryContext(options)
{
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity().OwnsMany(e => e.Settings, b => b.ToJson());
}
-#pragma warning restore EF8001
}
protected override ITestStoreFactory NonSharedTestStoreFactory
=> SqlServerTestStoreFactory.Instance;
+
+ protected override DbContextOptionsBuilder AddNonSharedOptions(DbContextOptionsBuilder builder)
+ => base.AddNonSharedOptions(builder)
+ .ConfigureWarnings(w => w.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
}
diff --git a/test/EFCore.SqlServer.FunctionalTests/ModelBuilding/SqlServerModelBuilderTestBase.cs b/test/EFCore.SqlServer.FunctionalTests/ModelBuilding/SqlServerModelBuilderTestBase.cs
index ad1c2a43102..28f9292984f 100644
--- a/test/EFCore.SqlServer.FunctionalTests/ModelBuilding/SqlServerModelBuilderTestBase.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/ModelBuilding/SqlServerModelBuilderTestBase.cs
@@ -1789,7 +1789,6 @@ public virtual void Temporal_table_with_period_mapped_to_CLR_property_via_lambda
Assert.Equal(ValueGenerated.OnAddOrUpdate, periodEnd.ValueGenerated);
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity()
{
@@ -2132,7 +2131,6 @@ public virtual void Entity_mapped_to_json_and_unwound_afterwards_properly_cleans
}
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Json_entity_mapped_to_view()
{
@@ -2307,9 +2305,7 @@ public virtual void Json_entity_with_custom_property_names()
Assert.Equal("InnerEnum", ownedEntity.GetProperty("Enum").GetJsonPropertyName());
}
}
-#pragma warning restore EF8001
}
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
public class SqlServerModelBuilderFixture : RelationalModelBuilderFixture
{
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/AdHocJsonQuerySqlServerTestBase.cs b/test/EFCore.SqlServer.FunctionalTests/Query/AdHocJsonQuerySqlServerTestBase.cs
index 48e637cef26..0c95c0550a4 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/AdHocJsonQuerySqlServerTestBase.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/AdHocJsonQuerySqlServerTestBase.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore.Diagnostics.Internal;
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs
index 0719a6d7ac3..ab29ff6bd3a 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs
@@ -19,6 +19,10 @@ public class AdHocMiscellaneousQuerySqlServerTest(NonSharedFixture fixture) : Ad
protected override ITestStoreFactory NonSharedTestStoreFactory
=> SqlServerTestStoreFactory.Instance;
+ protected override DbContextOptionsBuilder AddNonSharedOptions(DbContextOptionsBuilder builder)
+ => base.AddNonSharedOptions(builder)
+ .ConfigureWarnings(w => w.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
+
protected override DbContextOptionsBuilder SetParameterizedCollectionMode(
DbContextOptionsBuilder optionsBuilder,
ParameterTranslationMode parameterizedCollectionMode)
@@ -1533,7 +1537,6 @@ protected class Context30478(DbContextOptions options) : DbContext(options)
{
public DbSet Entities { get; set; }
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever();
@@ -1552,7 +1555,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
nb.OwnsOne(x => x.Nested);
});
}
-#pragma warning restore EF8001
public async Task SeedAsync()
{
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/JsonQueryJsonTypeSqlServerFixture.cs b/test/EFCore.SqlServer.FunctionalTests/Query/JsonQueryJsonTypeSqlServerFixture.cs
index df29d3304cd..09f876e6516 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/JsonQueryJsonTypeSqlServerFixture.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/JsonQueryJsonTypeSqlServerFixture.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
#nullable disable
using Microsoft.EntityFrameworkCore.TestModels.JsonQuery;
diff --git a/test/EFCore.SqlServer.FunctionalTests/Update/JsonUpdateJsonTypeSqlServerFixture.cs b/test/EFCore.SqlServer.FunctionalTests/Update/JsonUpdateJsonTypeSqlServerFixture.cs
index bdbcae78afa..28b8fe9dc51 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Update/JsonUpdateJsonTypeSqlServerFixture.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Update/JsonUpdateJsonTypeSqlServerFixture.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
#nullable disable
using Microsoft.EntityFrameworkCore.TestModels.JsonQuery;
diff --git a/test/EFCore.SqlServer.Tests/Infrastructure/SqlServerModelValidatorTest.cs b/test/EFCore.SqlServer.Tests/Infrastructure/SqlServerModelValidatorTest.cs
index 29e7aabbabc..da5ad4040f5 100644
--- a/test/EFCore.SqlServer.Tests/Infrastructure/SqlServerModelValidatorTest.cs
+++ b/test/EFCore.SqlServer.Tests/Infrastructure/SqlServerModelValidatorTest.cs
@@ -1177,7 +1177,6 @@ public virtual void Throws_for_vector_property_without_dimensions()
modelBuilder);
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public virtual void Throws_for_vector_property_inside_JSON_owned_entity()
{
@@ -1196,7 +1195,6 @@ public virtual void Throws_for_vector_property_inside_JSON_owned_entity()
SqlServerStrings.VectorPropertiesNotSupportedInJson(nameof(VectorContainer), nameof(VectorContainer.Vector)),
modelBuilder);
}
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
[Fact]
[Experimental("EF9105")]
diff --git a/test/EFCore.SqlServer.Tests/Migrations/SqlServerModelDifferTest.cs b/test/EFCore.SqlServer.Tests/Migrations/SqlServerModelDifferTest.cs
index 2ace09a083d..0947cb1b534 100644
--- a/test/EFCore.SqlServer.Tests/Migrations/SqlServerModelDifferTest.cs
+++ b/test/EFCore.SqlServer.Tests/Migrations/SqlServerModelDifferTest.cs
@@ -1895,7 +1895,6 @@ public void Rebuild_index_with_different_datacompression_value()
Assert.Equal(DataCompressionType.Page, annotationValue);
});
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact]
public void Alter_column_from_nvarchar_max_to_json_for_owned_type()
=> Execute(
@@ -2001,5 +2000,4 @@ public void Alter_column_from_nvarchar_max_to_json_for_complex_type()
Assert.Equal("nvarchar(max)", operation.ColumnType);
Assert.Equal("json", operation.OldColumn.ColumnType);
});
-#pragma warning restore EF8001 // Owned JSON entities are obsolete
}
diff --git a/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs
index 71802f6de15..0660567f662 100644
--- a/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs
+++ b/test/EFCore.Sqlite.FunctionalTests/MaterializationInterceptionSqliteTest.cs
@@ -17,16 +17,18 @@ public override async Task Intercept_query_materialization_with_owned_types_proj
public class SqliteLibraryContext(DbContextOptions options) : LibraryContext(options)
{
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity().OwnsMany(e => e.Settings, b => b.ToJson());
}
-#pragma warning restore EF8001
}
protected override ITestStoreFactory NonSharedTestStoreFactory
=> SqliteTestStoreFactory.Instance;
+
+ protected override DbContextOptionsBuilder AddNonSharedOptions(DbContextOptionsBuilder builder)
+ => base.AddNonSharedOptions(builder)
+ .ConfigureWarnings(w => w.Ignore(RelationalEventId.OwnedEntityMappedToJsonCollectionWarning));
}
diff --git a/test/EFCore.Tests/Infrastructure/ModelValidatorTest.cs b/test/EFCore.Tests/Infrastructure/ModelValidatorTest.cs
index 42915b4d38e..084be473704 100644
--- a/test/EFCore.Tests/Infrastructure/ModelValidatorTest.cs
+++ b/test/EFCore.Tests/Infrastructure/ModelValidatorTest.cs
@@ -57,7 +57,6 @@ public void Logs_warning_when_non_collection_complex_property_has_collection_typ
modelBuilder);
}
-#pragma warning disable EF8001 // Owned JSON entities are obsolete
[Fact] // Issue #33913
public virtual void Detects_well_known_concrete_collections_mapped_as_owned_entity_type()
{
@@ -72,7 +71,6 @@ public virtual void Detects_well_known_concrete_collections_mapped_as_owned_enti
"CoreEventId.AccidentalEntityType"),
modelBuilder);
}
-#pragma warning restore EF8001
protected class MyEntity
{