diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 5cbe7995ba..15887933ba 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -37,7 +37,6 @@ using Volo.Abp.Reflection; using Volo.Abp.Timing; using Volo.Abp.Uow; using Microsoft.EntityFrameworkCore.Diagnostics; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Volo.Abp.EntityFrameworkCore; @@ -773,8 +772,6 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, protected virtual void ConfigureValueConverter(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) where TEntity : class { - //TODO: There is a exception in EF Core 9, I'm trying to find a workaround. - return; if (mutableEntityType.BaseType == null && !typeof(TEntity).IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) && !typeof(TEntity).IsDefined(typeof(OwnedAttribute), true) && @@ -785,6 +782,9 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return; } + AbpDateTimeValueConverter.Clock = Clock; + AbpNullableDateTimeValueConverter.Clock = Clock; + foreach (var property in mutableEntityType.GetProperties(). Where(property => property.PropertyInfo != null && (property.PropertyInfo.PropertyType == typeof(DateTime) || property.PropertyInfo.PropertyType == typeof(DateTime?)) && @@ -795,8 +795,8 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, .Entity() .Property(property.Name) .HasConversion(property.ClrType == typeof(DateTime) - ? new AbpDateTimeValueConverter(Clock) - : new AbpNullableDateTimeValueConverter(Clock)); + ? new AbpDateTimeValueConverter() + : new AbpNullableDateTimeValueConverter()); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs index 38ac7e7a3b..174967cd05 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs @@ -1,5 +1,4 @@ using System; -using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Volo.Abp.Timing; @@ -7,10 +6,12 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters; public class AbpDateTimeValueConverter : ValueConverter { - public AbpDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null) + public static IClock? Clock { get; set; } + + public AbpDateTimeValueConverter(ConverterMappingHints? mappingHints = null) : base( - x => clock.Normalize(x), - x => clock.Normalize(x), + x => Clock!.Normalize(x), + x => Clock!.Normalize(x), mappingHints) { } @@ -18,10 +19,12 @@ public class AbpDateTimeValueConverter : ValueConverter public class AbpNullableDateTimeValueConverter : ValueConverter { - public AbpNullableDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null) + public static IClock? Clock { get; set; } + + public AbpNullableDateTimeValueConverter(ConverterMappingHints? mappingHints = null) : base( - x => x.HasValue ? clock.Normalize(x.Value) : x, - x => x.HasValue ? clock.Normalize(x.Value) : x, + x => x.HasValue ? Clock!.Normalize(x.Value) : x, + x => x.HasValue ? Clock!.Normalize(x.Value) : x, mappingHints) { } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs index 5f4671a985..c6fd04949a 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters; public abstract class EFCore_DateTimeKindTests : DateTimeKind_Tests { - [Fact(Skip = "Skip temporarily")] + [Fact] public async Task DateTime_Kind_Should_Be_Normalized_In_View_Query_Test() { var personName = "bob lee"; @@ -37,6 +37,7 @@ public abstract class EFCore_DateTimeKindTests : DateTimeKind_Tests base.AfterAddApplication(services); } - [Fact(Skip = "Skip temporarily")] + [Fact] public async Task DateTime_Kind_Should_Be_Normalized_By_MongoDb_Test() { var personId = Guid.NewGuid(); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs index 5d995c9a38..43489feda8 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs @@ -18,7 +18,7 @@ public abstract class DateTimeKind_Tests : TestAppTestBase(); } - [Fact(Skip = "Skip temporarily")] + [Fact] public async Task DateTime_Kind_Should_Be_Normalized_Test() { var personId = Guid.NewGuid();