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

如何获取EF Core 7实体的JSON导航属性列表?

如何获取EF Core 7实体的JSON导航字段列表

要识别通过OwnsOne(e => e.MyPropName, b => b.ToJson())配置的JSON导航字段,可通过以下逻辑实现:

  • 先筛选所有Owned类型导航:通过INavigation.IsOwned()判断,因为JSON存储的导航均是通过OwnsOne配置的Owned实体。
  • 再验证该Owned实体是否配置为JSON存储:检查目标实体类型的元数据中是否存在JSON转换相关注解。

具体代码实现

using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Metadata.Annotations;

// 获取目标实体的元数据类型
var entityType = context.Model.FindEntityType(typeof(TEntity));

// 筛选出所有JSON导航字段
var jsonNavigations = entityType.GetNavigations()
    .Where(n => n.IsOwned() 
        && n.TargetEntityType.FindAnnotation(RelationalAnnotationNames.JsonValueConverter) != null)
    .ToList();

原理说明

当调用ownedNavigationBuilder.ToJson()时,EF Core会为对应的Owned实体类型添加RelationalAnnotationNames.JsonValueConverter注解,并配置JSON值转换器。通过检查该注解是否存在,就能精准识别出哪些导航字段是以JSON格式存储的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:40:30