From 9e20e722f5aebd267e35719f295a3236da6725dc Mon Sep 17 00:00:00 2001 From: Andriy Svyryd Date: Mon, 15 Nov 2021 17:56:33 -0800 Subject: [PATCH] Cosmos: Use configured serializer when reading Fixes #26690 --- ...ionBindingRemovingExpressionVisitorBase.cs | 30 +++++++++++++--- .../BuiltInDataTypesCosmosTest.cs | 3 ++ .../CustomConvertersCosmosTest.cs | 3 ++ .../EndToEndCosmosTest.cs | 3 -- .../BuiltInDataTypesInMemoryTest.cs | 3 ++ .../ConvertToProviderTypesInMemoryTest.cs | 3 ++ .../CustomConvertersInMemoryTest.cs | 3 ++ .../BuiltInDataTypesTestBase.cs | 34 ++++++++++++++----- .../CustomConvertersTestBase.cs | 6 ++-- .../BuiltInDataTypesSqlServerTest.cs | 3 ++ .../ConvertToProviderTypesSqlServerTest.cs | 3 ++ .../CustomConvertersSqlServerTest.cs | 3 ++ .../EverythingIsBytesSqlServerTest.cs | 3 ++ .../EverythingIsStringsSqlServerTest.cs | 3 ++ .../BuiltInDataTypesSqliteTest.cs | 3 ++ .../ConvertToProviderTypesSqliteTest.cs | 3 ++ .../CustomConvertersSqliteTest.cs | 3 ++ 17 files changed, 94 insertions(+), 18 deletions(-) diff --git a/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitorBase.cs b/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitorBase.cs index 96c869ce780..12074bd75ae 100644 --- a/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitorBase.cs +++ b/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitorBase.cs @@ -9,6 +9,7 @@ using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; using Microsoft.EntityFrameworkCore.Cosmos.Internal; using Microsoft.EntityFrameworkCore.Cosmos.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Cosmos.Storage.Internal; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -39,6 +40,10 @@ private static readonly MethodInfo _jTokenToObjectMethodInfo = typeof(JToken).GetRuntimeMethods() .Single(mi => mi.Name == nameof(JToken.ToObject) && mi.GetParameters().Length == 0); + private static readonly MethodInfo _jTokenToObjectWithSerializerMethodInfo + = typeof(JToken).GetRuntimeMethods() + .Single(mi => mi.Name == nameof(JToken.ToObject) && mi.GetParameters().Length == 1 && mi.IsGenericMethodDefinition); + private static readonly MethodInfo _collectionAccessorAddMethodInfo = typeof(IClrCollectionAccessor).GetTypeInfo() .GetDeclaredMethod(nameof(IClrCollectionAccessor.Add)); @@ -65,16 +70,23 @@ private readonly IDictionary _ordinalParameterBindings private List _pendingIncludes = new(); + private readonly bool _useOldBehavior; + private static readonly MethodInfo _toObjectMethodInfo = typeof(CosmosProjectionBindingRemovingExpressionVisitorBase) .GetRuntimeMethods().Single(mi => mi.Name == nameof(SafeToObject)); + private static readonly MethodInfo _toObjectWithSerializerMethodInfo + = typeof(CosmosProjectionBindingRemovingExpressionVisitorBase) + .GetRuntimeMethods().Single(mi => mi.Name == nameof(SafeToObjectWithSerializer)); + public CosmosProjectionBindingRemovingExpressionVisitorBase( ParameterExpression jObjectParameter, bool trackQueryResults) { _jObjectParameter = jObjectParameter; _trackQueryResults = trackQueryResults; + _useOldBehavior = AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue26690", out var enabled) && enabled; } protected override Expression VisitBinary(BinaryExpression binaryExpression) @@ -704,9 +716,14 @@ private Expression CreateGetValueExpression( var body = ReplacingExpressionVisitor.Replace( converter.ConvertFromProviderExpression.Parameters.Single(), - Expression.Call( - jTokenParameter, - _jTokenToObjectMethodInfo.MakeGenericMethod(converter.ProviderClrType)), + _useOldBehavior + ? Expression.Call( + jTokenParameter, + _jTokenToObjectMethodInfo.MakeGenericMethod(converter.ProviderClrType)) + : Expression.Call( + jTokenParameter, + _jTokenToObjectWithSerializerMethodInfo.MakeGenericMethod(converter.ProviderClrType), + Expression.Constant(CosmosClientWrapper.Serializer)), converter.ConvertFromProviderExpression.Body); if (body.Type != type) @@ -760,11 +777,16 @@ private Expression ConvertJTokenToType(Expression jTokenExpression, Type type) => type == typeof(JToken) ? jTokenExpression : Expression.Call( - _toObjectMethodInfo.MakeGenericMethod(type), + _useOldBehavior + ? _toObjectMethodInfo.MakeGenericMethod(type) + : _toObjectWithSerializerMethodInfo.MakeGenericMethod(type), jTokenExpression); private static T SafeToObject(JToken token) => token == null || token.Type == JTokenType.Null ? default : token.ToObject(); + + private static T SafeToObjectWithSerializer(JToken token) + => token == null || token.Type == JTokenType.Null ? default : token.ToObject(CosmosClientWrapper.Serializer); } } } diff --git a/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs index 0944044addb..1dbf22b8319 100644 --- a/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs @@ -109,6 +109,9 @@ public TestSqlLoggerFactory TestSqlLoggerFactory public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind + => true; + protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) { base.OnModelCreating(modelBuilder, context); diff --git a/test/EFCore.Cosmos.FunctionalTests/CustomConvertersCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/CustomConvertersCosmosTest.cs index 40677268191..c5fac0b6fa9 100644 --- a/test/EFCore.Cosmos.FunctionalTests/CustomConvertersCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/CustomConvertersCosmosTest.cs @@ -191,6 +191,9 @@ public override bool SupportsDecimalComparisons public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind + => true; + public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; diff --git a/test/EFCore.Cosmos.FunctionalTests/EndToEndCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/EndToEndCosmosTest.cs index dca70bac2e8..b0fec871536 100644 --- a/test/EFCore.Cosmos.FunctionalTests/EndToEndCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/EndToEndCosmosTest.cs @@ -5,14 +5,11 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; -using System.Runtime.InteropServices; using System.Threading.Tasks; using Microsoft.Azure.Cosmos; -using Microsoft.Azure.Cosmos.Serialization.HybridRow; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Cosmos.ChangeTracking.Internal; using Microsoft.EntityFrameworkCore.Cosmos.Internal; -using Microsoft.EntityFrameworkCore.Diagnostics.Internal; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata.Conventions; using Microsoft.EntityFrameworkCore.TestUtilities; diff --git a/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs index efc7bd8afe2..eb96c693e34 100644 --- a/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/BuiltInDataTypesInMemoryTest.cs @@ -43,6 +43,9 @@ public override bool SupportsDecimalComparisons public override DateTime DefaultDateTime => new(); + + public override bool PreservesDateTimeKind + => true; } } } diff --git a/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs index 7c46caf1d07..c8bc222e2bc 100644 --- a/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/ConvertToProviderTypesInMemoryTest.cs @@ -43,6 +43,9 @@ public override bool SupportsDecimalComparisons public override DateTime DefaultDateTime => new(); + + public override bool PreservesDateTimeKind + => true; } } } diff --git a/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs index 2ab78d2479e..7b354723761 100644 --- a/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/CustomConvertersInMemoryTest.cs @@ -71,6 +71,9 @@ public override bool SupportsDecimalComparisons public override DateTime DefaultDateTime => new(); + + public override bool PreservesDateTimeKind + => true; } } } diff --git a/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs b/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs index ce11eb13da2..a622a24ce80 100644 --- a/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs +++ b/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; +using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; @@ -261,7 +262,7 @@ private void QueryBuiltInDataTypesTest(EntityEntry source) if (entityType.FindProperty(nameof(BuiltInDataTypes.TestDateTimeOffset)) != null) { - var param7 = new DateTimeOffset(new DateTime(), TimeSpan.Zero); + var param7 = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)); Assert.Same( entity, set.Where(e => e.Id == 11 && EF.Property(e, nameof(BuiltInDataTypes.TestDateTimeOffset)) == param7) @@ -495,7 +496,7 @@ protected EntityEntry AddTestBuiltInDataTypes(DbSet s TestDouble = -1.23456789, TestDecimal = -1234567890.01M, TestDateTime = Fixture.DefaultDateTime, - TestDateTimeOffset = new DateTimeOffset(new DateTime(), TimeSpan.Zero), + TestDateTimeOffset = new DateTimeOffset(new DateTime(), TimeSpan.FromHours(-8.0)), TestTimeSpan = new TimeSpan(0, 10, 9, 8, 7), TestSingle = -1.234F, TestBoolean = true, @@ -1296,7 +1297,7 @@ public virtual void Can_insert_and_read_back_all_non_nullable_data_types() TestInt64 = -1234567890123456789L, TestDouble = -1.23456789, TestDecimal = -1234567890.01M, - TestDateTime = DateTime.Parse("01/01/2000 12:34:56"), + TestDateTime = DateTime.Parse("01/01/2000 12:34:56", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal), TestDateTimeOffset = new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), TestTimeSpan = new TimeSpan(0, 10, 9, 8, 7), TestSingle = -1.234F, @@ -1330,7 +1331,8 @@ public virtual void Can_insert_and_read_back_all_non_nullable_data_types() AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.TestInt64); AssertEqualIfMapped(entityType, -1.23456789, () => dt.TestDouble); AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.TestDecimal); - AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.TestDateTime); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal), + () => dt.TestDateTime); AssertEqualIfMapped( entityType, new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), () => dt.TestDateTimeOffset); @@ -1547,6 +1549,14 @@ private void AssertEqualIfMapped(IEntityType entityType, T expected, Expressi { Assert.True(Equal(Convert.ToUInt64(expected), Convert.ToUInt64(actual)), $"Expected:\t{expected}\r\nActual:\t{actual}"); } + else if(type == typeof(DateTime)) + { + Assert.True(Equal((DateTime)(object)expected, (DateTime)(object)actual), $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } + else if (type == typeof(DateTimeOffset)) + { + Assert.True(Equal((DateTimeOffset)(object)expected, (DateTimeOffset)(object)actual), $"Expected:\t{expected:O}\r\nActual:\t{actual:O}"); + } else { Assert.Equal(expected, actual); @@ -1586,6 +1596,12 @@ private bool Equal(ulong left, ulong right) return left == right; } + private bool Equal(DateTime left, DateTime right) + => left.Equals(right) && (!Fixture.PreservesDateTimeKind || left.Kind == right.Kind); + + private bool Equal(DateTimeOffset left, DateTimeOffset right) + => left.EqualsExact(right); + private static Type UnwrapNullableType(Type type) => type == null ? null : Nullable.GetUnderlyingType(type) ?? type; @@ -1674,9 +1690,9 @@ public virtual void Can_insert_and_read_back_all_nullable_data_types_with_values TestNullableInt64 = -1234567890123456789L, TestNullableDouble = -1.23456789, TestNullableDecimal = -1234567890.01M, - TestNullableDateTime = DateTime.Parse("01/01/2000 12:34:56"), + TestNullableDateTime = DateTime.Parse("01/01/2000 12:34:56").ToUniversalTime(), TestNullableDateTimeOffset = - new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)).ToUniversalTime(), TestNullableTimeSpan = new TimeSpan(0, 10, 9, 8, 7), TestNullableSingle = -1.234F, TestNullableBoolean = false, @@ -1711,9 +1727,9 @@ public virtual void Can_insert_and_read_back_all_nullable_data_types_with_values AssertEqualIfMapped(entityType, -1234567890123456789L, () => dt.TestNullableInt64); AssertEqualIfMapped(entityType, -1.23456789, () => dt.TestNullableDouble); AssertEqualIfMapped(entityType, -1234567890.01M, () => dt.TestNullableDecimal); - AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56"), () => dt.TestNullableDateTime); + AssertEqualIfMapped(entityType, DateTime.Parse("01/01/2000 12:34:56").ToUniversalTime(), () => dt.TestNullableDateTime); AssertEqualIfMapped( - entityType, new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)), + entityType, new DateTimeOffset(DateTime.Parse("01/01/2000 12:34:56"), TimeSpan.FromHours(-8.0)).ToUniversalTime(), () => dt.TestNullableDateTimeOffset); AssertEqualIfMapped(entityType, new TimeSpan(0, 10, 9, 8, 7), () => dt.TestNullableTimeSpan); AssertEqualIfMapped(entityType, -1.234F, () => dt.TestNullableSingle); @@ -2392,6 +2408,8 @@ public virtual int IntegerPrecision public abstract bool SupportsDecimalComparisons { get; } public abstract DateTime DefaultDateTime { get; } + + public abstract bool PreservesDateTimeKind { get; } } protected class BuiltInDataTypesBase diff --git a/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs b/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs index f1aef2d11ab..e91ef5f9a48 100644 --- a/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs +++ b/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs @@ -891,7 +891,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con b.Property(e => e.TestDateTimeOffset).HasConversion( v => v.ToUnixTimeMilliseconds(), - v => DateTimeOffset.FromUnixTimeMilliseconds(v)); + v => DateTimeOffset.FromUnixTimeMilliseconds(v).ToOffset(TimeSpan.FromHours(-8.0))); b.Property(e => e.TestDouble).HasConversion( new ValueConverter( @@ -941,7 +941,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con b.Property(e => e.TestNullableDateTimeOffset).HasConversion( v => v.Value.ToUnixTimeMilliseconds(), - v => (DateTimeOffset?)DateTimeOffset.FromUnixTimeMilliseconds(v)); + v => (DateTimeOffset?)DateTimeOffset.FromUnixTimeMilliseconds(v).ToOffset(TimeSpan.FromHours(-8.0))); b.Property(e => e.TestNullableDouble).HasConversion( new ValueConverter( @@ -1005,7 +1005,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con b.Property(nameof(BuiltInDataTypes.TestDateTimeOffset)).HasConversion( new ValueConverter( v => v.ToUnixTimeMilliseconds(), - v => DateTimeOffset.FromUnixTimeMilliseconds(v))); + v => DateTimeOffset.FromUnixTimeMilliseconds(v).ToOffset(TimeSpan.FromHours(-8.0)))); b.Property(nameof(BuiltInDataTypes.TestDouble)).HasConversion( new ValueConverter( diff --git a/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs index 0cea85a2066..569c403e591 100644 --- a/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs @@ -3538,6 +3538,9 @@ public override bool SupportsLargeStringComparisons public override bool SupportsDecimalComparisons => true; + public override bool PreservesDateTimeKind + => false; + protected override ITestStoreFactory TestStoreFactory => SqlServerTestStoreFactory.Instance; diff --git a/test/EFCore.SqlServer.FunctionalTests/ConvertToProviderTypesSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/ConvertToProviderTypesSqlServerTest.cs index c6c46565bc8..e88c2365984 100644 --- a/test/EFCore.SqlServer.FunctionalTests/ConvertToProviderTypesSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/ConvertToProviderTypesSqlServerTest.cs @@ -199,6 +199,9 @@ public override bool SupportsDecimalComparisons public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind + => false; + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) => base .AddOptions(builder) diff --git a/test/EFCore.SqlServer.FunctionalTests/CustomConvertersSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/CustomConvertersSqlServerTest.cs index ed70d87096c..85fa725ba65 100644 --- a/test/EFCore.SqlServer.FunctionalTests/CustomConvertersSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/CustomConvertersSqlServerTest.cs @@ -334,6 +334,9 @@ public override bool SupportsDecimalComparisons public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind + => false; + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) => base .AddOptions(builder) diff --git a/test/EFCore.SqlServer.FunctionalTests/EverythingIsBytesSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/EverythingIsBytesSqlServerTest.cs index e3c4c7b37a3..750cfdf4464 100644 --- a/test/EFCore.SqlServer.FunctionalTests/EverythingIsBytesSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/EverythingIsBytesSqlServerTest.cs @@ -223,6 +223,9 @@ public override bool SupportsDecimalComparisons public override DateTime DefaultDateTime => new(); + public override bool PreservesDateTimeKind + => false; + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) => base .AddOptions(builder) diff --git a/test/EFCore.SqlServer.FunctionalTests/EverythingIsStringsSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/EverythingIsStringsSqlServerTest.cs index ca8e2cd2f12..398035e7f71 100644 --- a/test/EFCore.SqlServer.FunctionalTests/EverythingIsStringsSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/EverythingIsStringsSqlServerTest.cs @@ -205,6 +205,9 @@ public override bool SupportsUnicodeToAnsiConversion public override bool SupportsLargeStringComparisons => true; + public override bool PreservesDateTimeKind + => false; + protected override string StoreName { get; } = "EverythingIsStrings"; protected override ITestStoreFactory TestStoreFactory diff --git a/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs index 0b1431eec24..3891dac11ba 100644 --- a/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs @@ -1667,6 +1667,9 @@ public override bool SupportsLargeStringComparisons public override bool SupportsDecimalComparisons => false; + public override bool PreservesDateTimeKind + => false; + protected override ITestStoreFactory TestStoreFactory => SqliteTestStoreFactory.Instance; diff --git a/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs index abda8cacb24..3d202582ac7 100644 --- a/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/ConvertToProviderTypesSqliteTest.cs @@ -45,6 +45,9 @@ public override bool SupportsBinaryKeys public override DateTime DefaultDateTime => new(); + + public override bool PreservesDateTimeKind + => true; } } } diff --git a/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs index 770014bd8fc..4d3882f835f 100644 --- a/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/CustomConvertersSqliteTest.cs @@ -154,6 +154,9 @@ public override bool SupportsBinaryKeys public override DateTime DefaultDateTime => new(); + + public override bool PreservesDateTimeKind + => true; } } }