EF Core 7.0.3配置JSON嵌套拥有实体时触发空引用异常
EF7 RC2 中 ToJson() 配置嵌套拥有实体触发空引用异常的解决办法
问题概况
- 基于EF7 RC2官方示例编写的精简代码,创建
UserDbContext时,OnModelCreating方法触发空引用异常 - 触发场景:为
Author实体的Contact导航属性配置ToJson(),同时嵌套配置拥有Address实体 - 验证结论:移除
ToJson()仅保留嵌套拥有实体配置时,代码正常运行,能生成ContactDetails相关字段,已排除其他代码问题
问题原因
EF7 RC2版本存在bug,当对包含拥有实体的导航属性使用ToJson()时,EF Core内部处理JSON序列化的元数据逻辑会出现空引用。
解决方法
- 升级版本:将EF7升级到正式版或后续更新的预览版本,官方通常会在正式版修复RC阶段的这类bug
- 临时替代方案:如果暂时无法升级,可将
Contact和Address合并为单个实体类,直接对该类使用ToJson(),避免嵌套拥有实体的配置 - 调整配置顺序(临时规避):确保先调用
ToJson()再配置嵌套拥有实体,部分场景下可临时解决问题,示例代码:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Author>() .OwnsOne(a => a.Contact, contactBuilder => { contactBuilder.ToJson(); contactBuilder.OwnsOne(c => c.Address); }); }
内容的提问来源于stack exchange,提问作者MDK
相关产品推荐
相关产品推荐

