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