Entity Framework DbFunction and NotParameterized attribute on Oracle
Posted: Mon 25 Jun 2018 14:51
Hello, I have an extension to my ModelBuilder declaring a DB function (JSON_VALUE) which allows the use of JSON_VALUE in Entity Framework :
I use the latest NuGet package (Devart.Data.Oracle v9.6.540)
My problem is that it works on SQL Server, where EF generates this kind of SQL :
while I get this on Oracle :
Which gives me a "ORA-00911: invalid character", because the $.AffaireId is not encapsulated by quotes.
What am I missing ?
Code: Select all
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json.Linq;
namespace Lib.Extensions
{
public static class EfExtensions
{
/// <summary>
/// JSON_VALUE function for EF
/// https://github.com/aspnet/EntityFrameworkCore/issues/11295#issuecomment-373852015
/// </summary>
public static string JsonValue(string column, [NotParameterized] string path)
{
// C# implementation, not important for the current issue
}
/// <summary>
/// Adds support for JSON_VALUE inside EF queries on this DB context
/// </summary>
/// <example>
/// query.Where(_ => _.Reference != null && EfExtensions.JsonValue(_.Reference, $"$.{key}") == value)
/// </example>
public static void AddJsonValue(ModelBuilder bld)
{
bld.HasDbFunction(typeof(EfExtensions).GetMethod(nameof(JsonValue)))
.HasName("JSON_VALUE")
.HasSchema("");
}
}
}
My problem is that it works on SQL Server, where EF generates this kind of SQL :
Code: Select all
WHERE (JSON_VALUE("_".REFERENCE, N'$.AffaireId') = @p__ToString_0))
Code: Select all
WHERE (JSON_VALUE("_".REFERENCE, $.AffaireId) = :p__ToString_0))
What am I missing ?