EF Core 6 JSON列实现示例:将Employee类Address属性映射为JSON列
EF Core 6+ 将复杂属性映射为JSON列的配置方法
以下两种实现方式可按需选择:
方式1:Fluent API(支持EF Core 6.0及以上,通用推荐)
直接在你的自定义DbContext类的OnModelCreating方法中添加配置即可:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Employee>() // 标记Address为Employee的从属对象 .OwnsOne(e => e.Address, builder => { // 配置从属对象序列化为JSON存储 builder.ToJson(); }); }
方式2:特性注解(仅支持EF Core 7.0及以上)
直接在实体类上标记对应特性即可,无需修改DbContext配置:
// 标记Address为从属实体类 [Owned] public class Address { public string City { get; set; } public string Region { get; set; } public string PostalCode { get; set; } public string Country { get; set; } public string Phone { get; set; } } public class Employee { public int Id { get; set; } public string Name { get; set; } public DateOnly JoiningDate { get; set; } // 标记该属性映射为JSON列 [JsonColumn] public Address Address { get; set; } }
注意事项
- 配置完成后执行迁移,生成的列类型会自动适配对应数据库的JSON类型(如PostgreSQL为jsonb、MySQL为json、SQL Server为带JSON逻辑标记的nvarchar(max))
- 日常读写无需手动处理JSON序列化/反序列化,直接操作
Address对象即可,EF Core会自动完成转换 - 支持直接对JSON内部属性做查询,例如
dbContext.Employees.Where(e => e.Address.City == "上海"),EF Core会自动生成对应数据库的JSON查询语法,性能和普通列查询基本一致
内容的提问来源于stack exchange,提问作者Faraz Ahmed
相关产品推荐
相关产品推荐

