美文网首页Amazing .NETASP.NET Core见识录.NET
EFCore使用JSON_VALUE查询json对象的值

EFCore使用JSON_VALUE查询json对象的值

作者: 天天向上卡索 | 来源:发表于2019-01-15 23:39 被阅读4次

EFCore使用JSON_VALUE查询json对象的值

Intro

SqlServer 从2016开始支持 JSON 操作,可以使用 JSON_VALUE 查询 JSON 对象的某个属性值,更多介绍,现在公司的一些项目主要是使用 EF Core,手写sql较少,针对比较简单的 JSON_VALUE 查询想通过 DbFunction 来实现,于是就有了这篇文章的探索。

定义 JSON_VALUE DbFunction

    public static class DbFunctions
    {
        [DbFunction("JSON_VALUE", "")]
        public static string JsonValue(string column, [NotParameterized] string path)
        {
            throw new NotSupportedException();
        }
    }

在 DbContext 中注册 DbFunction

    public class TestDbContext : DbContext
    {
        public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)
        {
        }

        public DbSet<TestEntity> TestEntities { get; set; }

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

    public class TestEntity
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        public string Extra { get; set; }

        public DateTime CreatedAt { get; set; }
    }

使用注册的 DbFunction 查询 JSON_VALUE

数据库中添加了三条测试数据

sample data
var loggerFactory = new LoggerFactory();
loggerFactory.AddLog4Net();

var optionsBuilder = new DbContextOptionsBuilder<TestDbContext>()
                .UseLoggerFactory(loggerFactory)
                .UseSqlServer("server=.;database=Test;Integrated Security=True");

var db = new TestDbContext(optionsBuilder.Options);

var names = db.TestEntities.AsNoTracking().Select(t => DbFunctions.JsonValue(t.Extra, "$.Name")).ToArray();

监控生成的Sql语句

我这里通过 log4net 记录执行的 sql 语句,监控到执行的sql语句如下:

SELECT JSON_VALUE([t].[Extra], N'$.Name')
FROM [TestEntities] AS [t]

Source

示例代码: https://github.com/WeihanLi/WeihanLi.EntityFramework/blob/master/samples/WeihanLi.EntityFramework.Samples/Program.cs

Reference

相关文章

  • EFCore使用JSON_VALUE查询json对象的值

    EFCore使用JSON_VALUE查询json对象的值 Intro SqlServer 从2016开始支持 JS...

  • 前端小白之面向对象基础1

    1.字面量对象 2.json对象 仅仅用于数据交换传递 遍历json 字面量对象 使用for in遍历出对象里的值...

  • JavaScript本地存储

    一、json对象(1) 认识json对象JSON对象:存储复杂数据的字面量对象① 基本语法: ② 查询数据 ③ 修...

  • MYSQL JSON值查询

    mysql根据json字段的内容检索查询数据 使用 字段->'$.json属性'进行查询条件 使用json_ext...

  • js对json数组常用操作方法(增、删、改、查)

    json数组 新增一个对象 删除其中一个对象 修改其中一个对象的属性值 查询筛选 filter 根据对象属性值得到...

  • Json

    Json语法 数据使用名:值对表示 使用{}保存对象,每个名称后面跟着一个‘:’(冒号),名/值对使用,(逗号)分...

  • JavaScript 数据持久化:localStorage、se

    注意:存储的值必须是字符串,如果存储的值是对象,必须使用JSON.stringify()方法转化成JSON字符串,...

  • 数据库基本操作Q和F

    Q和F F使用查询条件的值,专门取对象中某列值的操作 Q 构建搜索条件 通常,Q()对象使得定义查询条件然后重用成...

  • Json学习总结

    目录 什么是 Json? 为什么使用Json? Json语法规则 Json值 Json使用 Json 使用范围 J...

  • efcore系列二 efcore的查询流程

    上一篇文章简单介绍了efcore生成迁移文件的流程,并做了数据的插入与查询操作。这里会延续上一篇文章创建的项目,分...

网友评论

    本文标题:EFCore使用JSON_VALUE查询json对象的值

    本文链接:https://www.haomeiwen.com/subject/ujnudqtx.html