EFCore可选外键配置错误:单独插入SubAreaId/WorkcenterId报外键冲突
问题根因
你的Workcenter导航属性的外键配置存在笔误,错误将SubAreaId指定为了Workcenter的外键字段,而非实体中定义的WorkcenterId:
// 错误配置片段 b.HasOne(x => x.Workcenter) .WithMany(x => x.TaskLocations) .HasForeignKey(x => x.SubAreaId) // 此处外键字段配置错误 .IsRequired(false);
这个错误配置会让EF生成异常的外键约束:将TaskLocation表的SubAreaId字段同时作为两个关联关系的外键,既要关联SubArea表的主键,又要关联Workcenter表的主键,完全不符合你预期的设计逻辑。当插入数据时,SubAreaId的取值需要同时满足两个关联表的外键校验,自然会触发约束冲突报错。
修复方案
将Workcenter的外键配置改为实体中对应的WorkcenterId字段即可:
// 修正后配置片段 b.HasOne(x => x.Workcenter) .WithMany(x => x.TaskLocations) .HasForeignKey(x => x.WorkcenterId) .IsRequired(false);
修正后两个外键相互独立,且均为可空状态,即可正常支持仅传入SubAreaId或仅传入WorkcenterId的插入操作。
内容的提问来源于stack exchange,提问作者MatR
相关产品推荐
相关产品推荐

