微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实体框架:更新不可为空的外键值时出现参照完整性约束冲突错误

如何解决实体框架:更新不可为空的外键值时出现参照完整性约束冲突错误

我们正在使用带有工作单元的Entity Framework和通用存储库模式,以下是该场景中的实体。

@Id

当我们尝试更新具有一对一关系的public class Plan { public Guid PlanUuid { get; set; } // Primary key public virtual ICollection<PlanDetail> Details { get; set; } // has navigation property in edmx } public class PlanDetail { public Guid PlanDetailUuid { get; set; } // Primary Key public virtual Plan Plan { get; set; } // has navigation property in edmx public Guid PlanUuid { get; set; } public virtual Tier Tier { get; set; } // has navigation property in edmx public Guid TierUuid { get; set; } public virtual DevMetrics Metrics { get; set; } // also has navigation property in edmx public Guid MetricUuid { get; set; } } public partial class Tier { public System.Guid TierUuid { get; set; } } 的不可为空的外键(TierUuid)时,出现以下错误

发生了引用完整性约束冲突:当从属对象为Unchanged时,不能更改作为引用完整性约束一部分的主键属性,除非将其设置为关联的主对象。必须跟踪主要对象,并且不将其标记删除

这是使用的代码

PlanDetail

以上代码在更新其他public ServiceResponse UpdatePlanDetail(PlanDetailUpdateDTO planDetailUpdateDTO) { //get the plan detail from database based on Id var planDetail = this._unitOfWork.PlanDetailRepository.LoadOnUuid(planDetailUpdateDTO.PlanDetailUuid); // get the new Tier to be applied var tier = this._unitOfWork.TierRepository.LoadOnUuid(planDetailUpdateDTO.tieruuid); //Assign planDetail.Tier = tier; planDetail.TierUuid = tieruuid; //Update this._unitOfWork.PlanDetailRepository.Update(details); // save and log the changes (Audit) this._unitOfWork.SaveAndLogChanges(); } // generic repository update method public virtual void Update(TEntity entityToUpdate) { this._dbSet.Attach(entityToUpdate); this._context.Entry(entityToUpdate).State = EntityState.Modified; } public void SaveAndLogChanges() { // following statement gives the integrity constraint error mentioned above context.ChangeTracker.DetectChanges(); // some other code this._context.SaveChanges(); } 外键(例如Plandetail)时可以完美地工作,但仅在MetricUuid更新时失败。我认为是因为另一个外键(Tieruuid)可为空,所以即使相关对象(MetricUuid)可为空,也可以成功将其保存在数据库中。

我试图在StackOverflow上进行搜索,并在以下语句之前找到了创建新上下文的潜在解决方案,但我不确定这在我的项目中是否可行

DevMetrics

请指导其他解决方案。

谢谢, 阿莫尔

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。