@@ -16,6 +16,9 @@ public class JsonConvertedValueReaderWriter<TModel, TProvider> :
16
16
JsonValueReaderWriter < TModel > ,
17
17
IJsonConvertedValueReaderWriter
18
18
{
19
+ private static readonly bool UseOldBehavior36856 =
20
+ AppContext . TryGetSwitch ( "Microsoft.EntityFrameworkCore.Issue36856" , out var enabled ) && enabled ;
21
+
19
22
private readonly JsonValueReaderWriter < TProvider > _providerReaderWriter ;
20
23
private readonly ValueConverter _converter ;
21
24
@@ -52,8 +55,17 @@ ValueConverter IJsonConvertedValueReaderWriter.Converter
52
55
53
56
/// <inheritdoc />
54
57
public override Expression ConstructorExpression
55
- => Expression . New (
56
- _constructorInfo ,
57
- ( ( ICompositeJsonValueReaderWriter ) this ) . InnerReaderWriter . ConstructorExpression ,
58
- ( ( IJsonConvertedValueReaderWriter ) this ) . Converter . ConstructorExpression ) ;
58
+ => UseOldBehavior36856
59
+ ? Expression . New (
60
+ _constructorInfo ,
61
+ ( ( ICompositeJsonValueReaderWriter ) this ) . InnerReaderWriter . ConstructorExpression ,
62
+ ( ( IJsonConvertedValueReaderWriter ) this ) . Converter . ConstructorExpression )
63
+ : Expression . New (
64
+ _constructorInfo ,
65
+ ( ( ICompositeJsonValueReaderWriter ) this ) . InnerReaderWriter . ConstructorExpression ,
66
+ // We shouldn't quote converters, because it will create a new instance every time and
67
+ // it will have to compile the expression again and
68
+ // it will have a negative performance impact. See #36856 for more info.
69
+ // This means this is currently unsupported scenario for precompilation.
70
+ Expression . Constant ( ( ( IJsonConvertedValueReaderWriter ) this ) . Converter ) ) ;
59
71
}
0 commit comments