#39060·efcore

存储文件中未显示的自有JSON采集导航作为无效(自有对应编号为38625)实现

作者: philcarbone创建于 2026年9月22日更新于 2026年9月29日
标签area-queryarea-jsonarea-owned-entities

QQ 错误描述

#38625报道说,一张地图被绘制给JSON的"复杂*"收藏,其密钥不在所存储的文档中,被实现为"null"而不是一空收藏,因此在收藏被添加到该类型之前,行会一直被坚持. #39014 修正了复杂的收藏, 并故意让 * 拥有的实体 * 收集导航 映射到 JSON 上,

所拥有案件的行为完全相同,从同一个代码路径来看:Jsonnitity Materiner Reriger ' 运行了读取回回回路之后的每一个嵌入物修复,因此,在文档中从未出现的导航可以以null'来引用它的修复。

以现有的 " Jsonnity Basic " (SQLite,json remove'/json set ' )固定方式复制,用于塑造所储存的文件:

  • 已存储的`自有参考 Root ' 文件 * * * * * * * * * * |.
  • 关键自备部队 ' ** 缺席** 自备部队 ' 部门=== QQ 密钥存在, 有 “ [] ” , 空列表 , 空列表 。

因此,一个将自有收藏添加到现有的JSON自有类型中的应用程序会看到每行原有的“null”,但之后每行的“null”。 EF所编写的文档总是包含密钥,因此这只有在计划进化后才被咬入,或者与另一个作者所出出的文件相接.

预期行为

与#39014中对复杂藏品的固定一致:不存在的自有藏品导航作为空藏品实现;保留了明确的JSON`null'.

EF 内的先例

  • ** 宇宙已经这样做了。 ** 宇宙成像计算器 ' 创建了带收集器 ' 的巢状集。 创建() ' *在 * 其属性读取回路并添加读取的元素([来源](https://GitHub.com/dotnet/efcore/blob/be5ef4a52d88cabacdea656dac85024a25584882f/src/EFCore.Cosmos/Query/Internal/CosmospedQueryComputing Expressionitor.ShaperPropressingExpressional Visitor.cs#L1289-L1301)),因此一个密钥从未出现出出空藏. (宇宙对一个明确的 " null " 也产生空洞;#39014中的关系定律将 " nall " 保留在那里,这似乎是更好的区分,但缺一关键的结果是一样的。 )
  • ** 关系已经为当前[]'产生相同的对象。 **Matrialize Json Entity Collection'通过财产的IClr Collection Accessor'来建造空收;#39014中的固定部分对缺案使用相同的取取取器,因此缺案和[]'变得不可区分,这是演进的一行计划所需要的。

修正的注释

39014号的机制直接延伸:登记Inavigation { Iscollection: true }和`IComplex Property'的缺席财产修复。 两个细节与复杂案件不同,值得裁决:

  • ** 跟踪查询。 ** 对于拥有的实体,更改跟踪器进行修复,现有的跟踪修复只有在收集为 " null " 或空时才进行。 缺失的密钥应产生相同的 . . . . . . .