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 {