8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 EF Core 6 中使用 JSON_QUERY 作为 DbFunction

befzz 1月前

27 0

我正在尝试将 SQL Server 的内置 JSON 功能与 Entity Framework Core 6 结合使用。它实际上与 JSON_VALUE 配合得非常好,如下所示。var results = _context.Pages.Whe...

我正在尝试将 SQL Server 的内置 JSON 功能与 Entity Framework Core 6 结合使用。它实际上与 JSON_VALUE 配合得非常好,如下所示。

var results = _context.Pages.Where(p => MyDbFunctions.JsonValue(p._PublishedContent, "$.content").ToLower().Contains("test"));

DbContext如下:

public class JsonValueTestingContext : DbContext
{
    public JsonValueTestingContext(DbContextOptions context) : base(context) { }
    public DbSet<Page> Pages { get; set; }

    public DbSet<Template> Templates { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDbFunction(() => MyDbFunctions.JsonValue(default(string), default(string)));
        modelBuilder.HasDbFunction(() => MyDbFunctions.JsonQuery(default(string), default(string)));
    }
}

public static class MyDbFunctions
{
    [DbFunction("JSON_VALUE", Schema = "", IsBuiltIn = true)]
    public static string JsonValue(string source, [NotParameterized] string path) => throw new NotSupportedException();

    [DbFunction("JSON_QUERY", Schema = "", IsBuiltIn = true)]
    public static string JsonQuery(string source, [NotParameterized] string path) => throw new NotSupportedException();
}

我遇到的挑战是 JSON_VALUE 适用于字符串、整数、布尔值、日期时间等基本类型。但是,我也存储了一串数组,如 ['Apple', 'Orange', 'Pear'],我非常想做类似以下的事情:

var results = _context.Pages.Where(p => MyDbFunctions.JsonQuery(p._PublishedContent, "$.content").Contains("Apple"));

我似乎无法弄清楚如何实现后者。如果我尝试在 MyDbFunctions 中为 JSON_QUERY 返回 string[] 类型,它会说这是提供程序的无效返回类型。我也尝试了各种转换,但 Linq 无法转换。我觉得一定有办法。

帖子版权声明 1、本帖标题:在 EF Core 6 中使用 JSON_QUERY 作为 DbFunction
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由befzz在本站《json》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 谢谢,有了你的建议,我就能解决这个问题了。我会发布完整的解决方案作为对未来访问此帖子的人的回答。

返回
作者最近主题: