Skip to content

Commit 0c55f74

Browse files
committed
UseJsonSerializerOptions for PostgreSQL
1 parent 0221d3e commit 0c55f74

File tree

4 files changed

+1858
-770
lines changed

4 files changed

+1858
-770
lines changed

src/EFCoreSecondLevelCacheInterceptor/DbCommandInterceptorProcessor.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ public T ProcessExecutedCommands<T>(DbCommand command, DbContext? context, T res
154154
}
155155
}
156156

157-
return (T)(object)new EFTableRowsDataReader(tableRows);
157+
return (T)(object)new EFTableRowsDataReader(tableRows
158+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
159+
, _cacheSettings
160+
#endif
161+
);
158162
}
159163

160164
if (result is object)
@@ -258,7 +262,11 @@ public T ProcessExecutingCommands<T>(DbCommand command, DbContext? context, T re
258262
_logger.NotifyCacheableEvent(CacheableLogEventId.QueryResultSuppressed, message, commandText);
259263
}
260264

261-
using var rows = new EFTableRowsDataReader(new EFTableRows());
265+
using var rows = new EFTableRowsDataReader(new EFTableRows()
266+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
267+
, _cacheSettings
268+
#endif
269+
);
262270

263271
return (T)Convert.ChangeType(InterceptionResult<DbDataReader>.SuppressWithResult(rows), typeof(T),
264272
CultureInfo.InvariantCulture);
@@ -273,7 +281,11 @@ public T ProcessExecutingCommands<T>(DbCommand command, DbContext? context, T re
273281
_logger.NotifyCacheableEvent(CacheableLogEventId.QueryResultSuppressed, message, commandText);
274282
}
275283

276-
using var dataRows = new EFTableRowsDataReader(cacheResult.TableRows);
284+
using var dataRows = new EFTableRowsDataReader(cacheResult.TableRows
285+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
286+
, _cacheSettings
287+
#endif
288+
);
277289

278290
return (T)Convert.ChangeType(InterceptionResult<DbDataReader>.SuppressWithResult(dataRows), typeof(T),
279291
CultureInfo.InvariantCulture);

src/EFCoreSecondLevelCacheInterceptor/EFTableRowsDataReader.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using System.Data.Common;
66
using System.Globalization;
77
using System.Linq;
8-
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0 || NETCORE3_1
8+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
99
using System.Text.Json;
1010
#endif
1111

@@ -17,6 +17,11 @@ namespace EFCoreSecondLevelCacheInterceptor;
1717
public class EFTableRowsDataReader : DbDataReader
1818
{
1919
private readonly int _rowsCount;
20+
21+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
22+
private readonly EFCoreSecondLevelCacheSettings _settings;
23+
#endif
24+
2025
private readonly EFTableRows _tableRows;
2126
private readonly Dictionary<int, Type> _valueTypes;
2227
private int _currentRow;
@@ -26,11 +31,19 @@ public class EFTableRowsDataReader : DbDataReader
2631
/// <summary>
2732
/// Converts an EFTableRows to a DbDataReader.
2833
/// </summary>
29-
public EFTableRowsDataReader(EFTableRows tableRows)
34+
public EFTableRowsDataReader(EFTableRows tableRows
35+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
36+
,
37+
EFCoreSecondLevelCacheSettings settings
38+
#endif
39+
)
3040
{
3141
_tableRows = tableRows;
3242
_rowsCount = _tableRows.RowsCount;
3343
_valueTypes = new Dictionary<int, Type>(_tableRows.FieldCount);
44+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
45+
_settings = settings;
46+
#endif
3447
}
3548

3649
/// <summary>
@@ -547,13 +560,15 @@ public override T GetFieldValue<T>(int ordinal)
547560
return ProcessPostgresArrayOrList<T>(expectedValueType, enumerable);
548561
}
549562

550-
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0 || NETCORE3_1
563+
#if NET9_0 || NET8_0 || NET7_0 || NET6_0 || NET5_0
551564
var dbTypeName = GetDataTypeName(ordinal);
552565

553566
if (actualValueType == TypeExtensions.StringType &&
554567
string.Equals(dbTypeName, b: "jsonb", StringComparison.OrdinalIgnoreCase))
555568
{
556-
return JsonSerializer.Deserialize<T>((string)value)!;
569+
return _settings.JsonSerializerOptions is null
570+
? JsonSerializer.Deserialize<T>((string)value)!
571+
: JsonSerializer.Deserialize<T>((string)value, _settings.JsonSerializerOptions)!;
557572
}
558573
#endif
559574

0 commit comments

Comments
 (0)