如何获取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
相关产品推荐
相关产品推荐

