Breeze Sharp是否支持含同一实体多实例的变更集?及相关问题咨询
问题背景与技术栈
- 技术环境:Breeze.Sharp 0.9.8、Blazor .NET 7、EF Core
- 模型定义:
Line实体包含标量导航属性Item;Line的主键由7个属性构成,其中BomHeaderID、Revision、Type这3个属性同时作为关联Item实体的外键。
核心问题
1. 导航属性填充异常
通过Breeze查询获取Lines集合后,外键属性完全一致的多个Line实体中,仅单个实体的Item属性被正常赋值,其余同关联Line的Item均为null(无共享Item的实体无此异常)。
2. 批量保存触发EF Core跟踪冲突
调用entityManager.SaveChanges()批量保存Lines变更时,抛出以下异常:
System.InvalidOperationException: 'The instance of entity type 'Line' cannot be tracked because another instance with the key value '{BomHeaderID: 0-6 , Revision: , Type: product }' is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.'
- 补充信息:仅修改
Line的基础属性,Item实体未做任何修改;即使不展开Item或分离Item实体,该错误仍会触发。 - 临时规避方案:逐行调用
SaveChanges(new IEntity[] {thisRow})可完成保存,但这只是绕开同一DbContext批量提交限制的临时手段。
当前缓解措施(非最终解决方案)
- 为DbContext全局添加
AsNoTracking配置,解决了重复关联场景下Item属性缺失的问题; - 当存在重复关联
Item的Line实体时,放弃批量提交,改为逐行保存变更。
关于Breeze.Sharp版本的疑问
- 最初误以为NuGet提供0.9.8版本,实际确认NuGet无此版本,该版本来自原始BlazorBoilerPlate项目,来源不明;
- 当前使用的Breeze.Sharp包来自
breeze.github.io,另有Breeze.Sharp.Standard.Fork可从NuGet获取,存在版本不一致问题,希望明确Breeze.Sharp最新版本的官方获取渠道。
内容的提问来源于stack exchange,提问作者Paul Elliott
相关产品推荐
相关产品推荐

