From 3e38889adaf6b37107cec314b604fa3506bea03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Boris=20Mila=C5=A1inovi=C4=87?= Date: Wed, 22 Apr 2026 22:49:47 +0200 Subject: [PATCH] Add JSON function to models --- DataAccess/EF_Demo/Data/DbJson.cs | 7 ++++++ .../Data/MSSQL/EventsContext.Custom.cs | 14 +++++++++++ .../Data/Postgres/EventsContext.Custom.cs | 14 +++++++++++ DataAccess/EF_Demo/Demo.cs | 12 ++++++++-- DataAccess/EF_Demo/EF_Demo.sln | 24 +++++++++++++++++++ 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 DataAccess/EF_Demo/Data/DbJson.cs create mode 100644 DataAccess/EF_Demo/Data/MSSQL/EventsContext.Custom.cs create mode 100644 DataAccess/EF_Demo/Data/Postgres/EventsContext.Custom.cs create mode 100644 DataAccess/EF_Demo/EF_Demo.sln diff --git a/DataAccess/EF_Demo/Data/DbJson.cs b/DataAccess/EF_Demo/Data/DbJson.cs new file mode 100644 index 0000000..b193522 --- /dev/null +++ b/DataAccess/EF_Demo/Data/DbJson.cs @@ -0,0 +1,7 @@ +namespace EF_Demo.Data; + +internal static class DbJson +{ + public static string? JsonValue(string? expression, string path) + => throw new NotSupportedException(); +} diff --git a/DataAccess/EF_Demo/Data/MSSQL/EventsContext.Custom.cs b/DataAccess/EF_Demo/Data/MSSQL/EventsContext.Custom.cs new file mode 100644 index 0000000..2489b29 --- /dev/null +++ b/DataAccess/EF_Demo/Data/MSSQL/EventsContext.Custom.cs @@ -0,0 +1,14 @@ +using Microsoft.EntityFrameworkCore; + +namespace EF_Demo.Data.MSSQL; + +public partial class EventsContext +{ + partial void OnModelCreatingPartial(ModelBuilder modelBuilder) + { + modelBuilder + .HasDbFunction(typeof(DbJson).GetMethod(nameof(DbJson.JsonValue))!) + .HasName("JSON_VALUE") + .IsBuiltIn(); + } +} diff --git a/DataAccess/EF_Demo/Data/Postgres/EventsContext.Custom.cs b/DataAccess/EF_Demo/Data/Postgres/EventsContext.Custom.cs new file mode 100644 index 0000000..07132b7 --- /dev/null +++ b/DataAccess/EF_Demo/Data/Postgres/EventsContext.Custom.cs @@ -0,0 +1,14 @@ +using Microsoft.EntityFrameworkCore; + +namespace EF_Demo.Data.Postgres; + +public partial class EventsContext +{ + partial void OnModelCreatingPartial(ModelBuilder modelBuilder) + { + modelBuilder + .HasDbFunction(typeof(DbJson).GetMethod(nameof(DbJson.JsonValue))!) + .HasName("jsonb_extract_path_text") + .IsBuiltIn(); + } +} diff --git a/DataAccess/EF_Demo/Demo.cs b/DataAccess/EF_Demo/Demo.cs index 68780bc..96a04e5 100644 --- a/DataAccess/EF_Demo/Demo.cs +++ b/DataAccess/EF_Demo/Demo.cs @@ -5,6 +5,7 @@ using EF_Demo.Data.MSSQL; #endif using EF_Demo.Models; +using EF_Demo.Data; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; @@ -86,6 +87,12 @@ internal class Demo(IDbContextFactory contextFactory, ILogger internal void PrintPeople(int year) { +#if POSTGRES + const string hrPath = "hr"; +#else + const string hrPath = "$.hr"; +#endif + using var ctx = contextFactory.CreateDbContext(); var query = ctx.People .Where(p => p.BirthDate.Year == year) @@ -97,11 +104,12 @@ internal class Demo(IDbContextFactory contextFactory, ILogger