You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IEntityTypeConfiguration<T>配置实体时如何调用ToJson方法

将导航属性以JSON形式存储到SQL Server同表(IEntityTypeConfiguration实现)

核心实现方式

在你的实体配置类的Configure方法中,利用EF Core的ToJson()扩展方法,将目标导航属性映射为SQL Server的JSON列,同时通过OwnsOne/OwnsMany标记该属性为拥有型实体,避免生成单独关联表。

代码示例

  1. 实体类定义
    假设主实体为Order,需存为JSON的导航属性是集合类型的OrderDetails:
public class Order
{
    public int Id { get; set; }
    public string OrderNumber { get; set; }
    // 要序列化为JSON的导航属性
    public List<OrderDetail> OrderDetails { get; set; }
}

public class OrderDetail
{
    public string ProductName { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
}
  1. IEntityTypeConfiguration配置类
    在配置类中完成JSON列的映射配置:
public class OrderConfiguration : IEntityTypeConfiguration<Order>
{
    public void Configure(EntityTypeBuilder<Order> builder)
    {
        // 配置主实体主键
        builder.HasKey(o => o.Id);

        // 将集合类型导航属性映射为同表的JSON列
        builder.OwnsMany(o => o.OrderDetails, b =>
        {
            b.ToJson(); // 关键:指定该属性序列化为JSON存储
        });

        // 如果是单个对象类型的导航属性,使用OwnsOne + ToJson()
        // builder.OwnsOne(o => o.SingleDetail, b => b.ToJson());
    }
}

关键注意事项

  • 不要在DbContext中为OrderDetail定义单独的DbSet,否则EF Core仍会尝试生成单独的数据表。
  • OwnsMany用于集合类型的导航属性,OwnsOne用于单个对象类型的导航属性,二者结合ToJson()均可实现数据嵌入同表的JSON列。
  • EF Core会自动处理JSON的序列化与反序列化,你可以像操作普通导航属性一样读写数据。

读写示例

// 新增带JSON属性的实体
var order = new Order
{
    OrderNumber = "ORD-001",
    OrderDetails = new List<OrderDetail>
    {
        new OrderDetail { ProductName = "Laptop", Quantity = 1, Price = 999.99m },
        new OrderDetail { ProductName = "Mouse", Quantity = 2, Price = 25.99m }
    }
};
dbContext.Orders.Add(order);
await dbContext.SaveChangesAsync();

// 查询时自动反序列化JSON
var retrievedOrder = await dbContext.Orders.FirstAsync(o => o.Id == order.Id);
foreach (var detail in retrievedOrder.OrderDetails)
{
    Console.WriteLine($"{detail.ProductName}: {detail.Quantity} x {detail.Price}");
}

内容的提问来源于stack exchange,提问作者Snooks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:55:06