EF Core – JSON Column
前言
SQL Server 支持 JSON, 以前写过一篇介绍 SQL Server – Work with JSON. 但 EF Core 一直没有支持.
直到 EF Core 7.0 才支持.
参考
YouTube – JSON Columns - New in Entity Framework Core 7
配置
public class Customer
{
public int Id { get; set; }
public string Name { get; set; } = "";
public Address Address { get; set; } = null!;
} public class Address
{
public string Line1 { get; set; } = "";
public string Line2 { get; set; } = "";
}
Address 是一个对象. 过往我们会把它配置成 Owned Entity, 属性 Line1, Line2 分别占据数据库 2 个 column. column name 是 Address_Line1, Address_Line2
这样是 ok 的, 但有时候我们希望它在数据库就一个 column, 然后用 JSON 格式保存资料. 反正数据库也支持 JSON 查询 (只是性能不容易优化), 一堆 column 毕竟很乱.
声明使用 JSON Column
它算是 Owned Entity 的扩展, 表面上依然是 Owned Entity, 但多了一个 ToJson() 声明
modelBuilder.Entity<Customer>().ToTable("Customer");
modelBuilder.Entity<Customer>().Property(e => e.Name).HasMaxLength(256);
modelBuilder.Entity<Customer>().OwnsOne(e => e.Address, addressBuilder =>
{
addressBuilder.ToJson();
addressBuilder.Property(e => e.Line1).HasMaxLength(256);
addressBuilder.Property(e => e.Line2).HasMaxLength(256);
});
数据库长相
生成出来的数据长这样. Address 值就是 JSON 格式

查询的 LINQ 是完全一样的, EF Core 在背地里会转换成对应的 JSON Query
var customers = await db.Customers.Where(e => e.Address.Line1 == "lorem 1").ToListAsync();
Query

嵌套
如果有多层, 只需要在最上层设置 ToJson() 就可以了.
Update Value
像平常一样直接 update Entity 就可以了. EF Core 会转换成 JSON_MODIFY 语句去更新

Array OwnsMany
除了对象, Array 也是可以的. 使用 OwnsMany. 操作和 OwnsOne 一摸一样.
modelBuilder.Entity<Customer>().OwnsMany(e => e.Addresses, addressesBuilder =>
{
addressesBuilder.ToJson();
addressesBuilder.Property(e => e.Line1).HasMaxLength(256);
addressesBuilder.Property(e => e.Line2).HasMaxLength(256);
});
query
var customer = await db.Customers.Where(e => e.Addresses.Count() > 3).ToListAsync();
Limitation
Github – Support spatial types in JSON columns
Github – Json: add support for collection of primitive types
EF Core – JSON Column的更多相关文章
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server
前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题. 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合 ...
- 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)
本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...
- Asp.net core 学习笔记 ( ef core )
更新 : 2018-11-26 这里记入一下关于 foreignKey cascade action 默认情况下如果我们使用 data annotation required + foreginkey ...
- ASP.NET Core使用EF Core操作MySql数据库
ASP.NET Core操作MySql数据库, 这样整套环境都可以布署在Linux上 使用微软的 Microsoft.EntityFrameworkCore(2.1.4) 和MySql出的 MySql ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- .Net Core2.2 + EF Core + DI,三层框架项目搭建教程
笔记: 近两年.Net Core发展的很快,目前最新版为3.0预览版,之前在网上买了一本1.1版书籍都还没来得及看呢,估计现在拿出来看也毫无意义了.已多年.net工作经验,看书不如直接实际上手来得快, ...
- ASP.Net Core5.0 EF Core使用记录
打算把之前开源的 基于ASP.Net Core开发一套通用后台框架 重新用ASP.Net Core 5写一遍,也算是巩固一下旧知识,学习下新知识.本文是项目搭建初期关于 EF Core 的使用记录 1 ...
- 使用EF Core更新与修改生产数据库
使用EF Core的Code First,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除.更新最新的数据结构.由于没有什么数据,删除的 ...
- EF Core 数据库迁移(Migration)
工具与环境介绍 1.开发环境为vs 2015 2.mysql EF Core支持采用 Pomelo.EntityFrameworkCore.MySql 源代码地址(https://github. ...
- Asp.net Core 通过 Ef Core 访问、管理Mysql
本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环 ...
随机推荐
- Curve 进入 CNCF Sandbox,完善统一云原生开源存储拼图
2022 年 6 月 15 日,云原生计算基金会 (CNCF) 宣布,分布式存储系统 Curve 被正式接纳为 CNCF 沙箱(Sandbox)项目.Curve 由网易数帆开源,提供块存储和文件存储能 ...
- tp6 uniapp跨越问题
自己写一个简单的中间件
- 输入Javac提示不是内部或外部命令
先去百度搜索"jdk下载"下载最新版jdk,并安装,安装目录不用去更改,直接默认就好,下载完了之后,双击打开安装,jdk安装完成后,会接着安装jre包,(jre和jdk是配对的,不 ...
- [oeasy]python0013_ASCII码表_英文字符编码_键盘字符
ASCII 码表 回忆上次内容 ord(c)和chr(i) 这是俩函数 这俩函数是一对,相反相成的⚖️ ord 通过 字符 找到对应的 数字 chr 通 ...
- VBA:用代码操作代码
Sub auto_open() Call runtimer '打开文档时自动运行 End Sub Sub runtimer() Application.OnTime Now + TimeValue(& ...
- java spring boot 权限认证总结瞎记一通,各种 方案。附近如何运行jar包。和如何读配文件
在正式笔之 前先来思考如何将java 的包打包成jar 包同,运行时指定配置,这样运行, 以上问题有空在来研究,有空在来补这个文档 首先呢,先来说说Session 怎么使用,这个在sping boot ...
- WorPress基础之谷歌GSC与GA统计代码安装
本篇文章讲介绍什么是GSC和GA以及如何安装. 什么是GSC GSC,全称为Google Search Console,由谷歌官方提供的网站管理工具,可帮助监控和维护网站在Google 搜索结果中的展 ...
- 通过程序名称kill掉所有的进程
通过程序名称kill掉所有的进程 今天差点把服务器搞崩了. 脚本的循环条件有问题,结果起了无数的nslookup,用pkill杀不掉,只能用kill一个个解决,服务器还被搞得慢得要命. 还好又黄队长, ...
- 加油,为Vue3提供一个可媲美Angular的ioc容器
为什么要为Vue3提供ioc容器 Vue3因其出色的响应式系统,以及便利的功能特性,完全胜任大型业务系统的开发.但是,我们不仅要能做到,而且要做得更好.大型业务系统的关键就是解耦合,从而减缓shi山代 ...
- EF Core性能优化技巧
代码层面的优化 1. 使用实例池 EFCore2.0 为DbContext引入新的注册方式:透明地注册了 DbContext实例池,使用这种方式可以避免始终创建新的实例,EF Core 将重置其状态并 ...