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

EF Core 8预览版Owned JSON集合查询无法转换问题咨询

EF Core 8预览版中OwnsMany结合ToJson的查询转换失败问题

我们正在使用Entity Framework Core 8.0.0-preview.7.23375.4预览版,需要在数据库列中存储JSON结构数据,因此尝试通过OwnsMany与ToJson的组合,实现对JSON内数据的便捷查询。

代码实现

DbContext配置

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Signal>(entity =>
    {
         // 其他属性配置
         entity.OwnsMany(
            e => e.Details, ownedNavigationBuilder =>
            {
                ownedNavigationBuilder.ToJson();
                ownedNavigationBuilder.OwnsMany(c => c.Values, b =>
                {
                     // 内部嵌套集合的配置
                });
            }
        );
    }
}

实体类定义

public class Signal
{
     // 其他属性
     public List<InnerEntity>? Details { get; set; }
}

public class InnerEntity
{
      public string Step { get; set; }
}

问题描述

执行以下LINQ查询时(未使用AsEnumerable、ToList等客户端求值方法),出现查询无法转换为SQL的错误:

.Where(s => s.Details.Any(s => s.Step == "2"));

错误信息如下:

LINQ表达式'DbSet().Where(s => EF.Property(s, "Details").AsQueryable().Any(o => o.Step == "2"))'无法转换。请将查询改写为可转换的形式,或通过调用'AsEnumerable'、'AsAsyncEnumerable'、'ToList'或'ToListAsync'显式切换到客户端求值。

疑问

我们了解到JSON查询相关问题已在Issue #28616和PR #31369中修复,想咨询:

  • 该修复功能是否已包含在当前使用的预览版中?
  • 如果功能已可用,我们的代码操作是否存在错误?
  • 问题是否与Any()方法有关?(我们也尝试过.Select(…).Contains()的方式,同样失败)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:25:15