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
相关产品推荐
相关产品推荐

