// Rollback changes
switch (entry.State)
{
case EntityState.Added:
entry.State = EntityState.Detached;
break;
case EntityState.Modified:
entry.CurrentValues.SetValues(entry.OriginalValues);
entry.State = EntityState.Unchanged;
break;
case EntityState.Deleted:
entry.State = EntityState.Unchanged;
break;
}
此代码在EF6 SaveChanges()
例外
我的scanrio,我插入一些值并删除旧值然后我得到一个例外。我的数据应该保留,因为回滚和网站应该正常工作。但是我在" EntityState.Unchanged"中得到了这个例外。在扇区" EntityState.Modified:"
消息=操作失败:无法更改关系 因为一个或多个外键属性是不可为空的。 当对关系进行更改时,相关的外键 property设置为null值。如果外键不支持 null值,必须定义一个新的关系,外键 必须为属性分配另一个非空值,或者不相关的属性 必须删除对象。源=的EntityFramework
为什么我无法将DB上下文更改回以前的状态?
编辑:
我如何删除依赖项?
workReport.sepapayments.Remove(sepaPayment);
workReportAccountSettlement.workreports.Remove(workReport);
答案 0 :(得分:1)
您要删除的数据具有相关的子对象,并且您具有外键关系设置。因此你无法删除/添加。
查看您要添加和删除的项目,并确保您拥有有效的实体。
我会将您的实施分成两个
第一
删除现有项目(确保在删除父级或使用级联之前删除相关子项目) - 如果您使用级联,请注意删除的内容
第二
删除作品后添加新项目
答案 1 :(得分:1)
而不是从集合中删除实体
workReport.sepapayments.Remove(sepaPayment);
workReportAccountSettlement.workreports.Remove(workReport);
尝试删除它们
myDBContext.Entry(sepaPayment).State = System.Data.Entity.EntityState.Deleted;
myDBContext.Entry(workReport).State = System.Data.Entity.EntityState.Deleted;
或者你可以
myDBContext.ObjectContext.DeleteObject(sepaPayment);
See also this answer。您获得此异常的原因是因为FK不可为空,这些entites(类)之间的UML关联是一个组合,因此您需要先完全删除实体或更改相关实体的FK。