efcore MySQL json_EF Core查询jsonb

efcore MySQL json_EF Core查询jsonb简介 JSON JavaScriptOb 在 web 开发和跨应用领域有着绝对的优势 甚至 Monodb Redis 数据库完全采用 json 存储 PostgreSQL 很早就已经全支持 JSON 类型的存储和查询 为了更大的提高 JSON 查询效率 PostgreSQL 提供了 jsonb 类型用来存储 JSON 目前 jsonb 的结构化 sql 查询已经十分强大 但是对于许多 web 开发者来说写 sql 已经

简介

JSON(JavaScript Object Notation)在web开发和跨应用领域有着绝对的优势,甚至Monodb、Redis数据库完全采用json存储。PostgreSQL很早就已经全支持JSON类型的存储和查询,为了更大的提高JSON查询效率PostgreSQL提供了jsonb类型用来存储JSON,目前jsonb的结构化sql查询已经十分强大,但是对于许多web开发者来说写sql已经成为过去式,我们更多的会使用linq或lambda来实现OOP中的对象查询。本篇就给大家介绍在EF Core中查询jsonb。

引用和依赖

在项目中引用Npgsql.EntityFrameworkCore.PostgreSql最新包 — Npgsql在查询时会生成postgreSQL语法。

实体和数据

创建JsonbEntity实体如下:

public class JsonbEntity

{

public Int Id { get; set; }

public JsonElement Customer { get; set; }

}

EF Core Mapping映射配置如下:

builder.Entity(b =>

{

b.ToTable(“jsonb”);

b.Property(x => x.Customer).HasColumnType(“jsonb”);

});

Code First迁移到数据库

PM> Add-Migration

PM> Update-Database

手动添加一条json到Customer:

{“Age”: 25, “Name”: “Joe”, “Orders”: [{“Price”: 9, “ShippingAddress”: “Some address 1”}, {“Price”: 23, “ShippingAddress”: “Some address 2”}]}

查询

查询jsonb表中第一条数据Customer字段中第一个Order的价格:

仓储方式查询:

var jsonb = _repository.First();

Console.WriteLine(jsonb.Customer.GetProperty(“Orders”)[0].GetProperty(“Price”).GetInt32());

DbContext方式查询:

var json= _dbContext.JsonbEntity.First().Customer.GetProperty(“Orders”)[0].GetProperty(“Price”).GetInt32();

Console.WriteLine(json);

查询结果:

5e61e87420753.png

接下来查询List

jsonb表中再次手动添加一条数据:

{“Age”: 27, “Name”: “Joe”, “Orders”: [{“Price”: 6, “ShippingAddress”: “Some address 1”}, {“Price”: 20, “ShippingAddress”: “Some address 2”}]}

lambda方式查询:

var jsonb = _repository.Where(_ => _.Customer.GetProperty(“Name”).GetString() == “Joe”).ToList();

查询结果:

5e61eb89e07c8.png

EF Core生成的Sql:

SELECT j.”Id”, j.”Customer”

FROM jsonb AS j

WHERE j.”Customer”->>’Name’ = ‘Joe’

可以看出EF Core是通过PostgreSql的jsonb语法进行查询的。

总结

PostgreSQL是一个功能齐全且十分强大的开源关系数据库,除了jsonb外其分表分库功能也是十分强大的,相信未来会有更多的企业和项目会将PostgreSQL作为首选关系数据库。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229247.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:08
下一篇 2026年3月16日 下午5:08


相关推荐

  • NanoBanana 2国内稳定渠道来了

    NanoBanana 2国内稳定渠道来了

    2026年3月13日
    1
  • python 整除及余数_python除法余数

    python 整除及余数_python除法余数广告关闭腾讯云 11 11 云上盛惠 精选热门产品助力上云 云服务器首年 88 元起 买的越多返的越多 最高返 5000 元 常量常量就是不变的变量 在 python 中 通常用大写的变量名表示常量 这一点和 java 想相同 ali address ali address www alibaba com4 除法 python 中和除法 除法 3 37037 除不尽有小数

    2026年3月18日
    2
  • iic通信协议原理(https协议原理)

    一、基本概念。I2C总线(I2Cbus,Inter-ICbus)是一个双向的两线连接总线,提供集成电路之间的通信线路。I2C属于一种串行扩展技术,广泛应用于电视、录像机、音频设备。I2C的意思是“完成集成电路或者功能单元之间信息交换的规范或协议”,采用一条数据线(SDA)和一条时钟线(SCL)来完成数据的传输以及外围器件的扩展。通信的原理是控制SCL和SDA的时序,时期满足总线协议从而进…

    2022年4月14日
    54
  • 【3Dtiles】3Dmax模型处理为gltf和3dtiles,包含LOD效果

    【3Dtiles】3Dmax模型处理为gltf和3dtiles,包含LOD效果3dmax 模型处理为 3dtiles

    2026年3月19日
    2
  • Java审计之XSS篇

    Java审计之XSS篇0x00前言继续学习一波Java审计的XSS漏洞的产生过程和代码。0x01Java中XSS漏洞代码分析xss原理xss产生过程:后台未对用户输入进行检查或过滤

    2021年12月12日
    42
  • Java ArrayList扩容机制

    Java ArrayList扩容机制设 ArrayList 的容量为 Capacity 如果你 ArrayListarr newArrayList initial capacity 那么 ArrayList 的初始容量就是 initial capacity 否则就为 10 添加元素时 1 如果元素个数 1 lt Capacity 那就放心添加元素 2 元素个数 1 gt Capacity 那 ArrayList 就发生扩容 容量 Capacity 变为 1 5Capacity 其实是 Capacity Capacity Capacity amp g

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号