【发布时间】:2016-05-05 07:58:45
【问题描述】:
// 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()异常后使用
我的扫描仪,我插入一些值并删除旧值,然后我得到一个异常。由于回滚,我的数据应该被保留,并且网站应该可以正常工作。但是我在“EntityState.Modified:”扇区的“EntityState.Unchanged”中得到了这个异常
Message=操作失败:无法更改关系 因为一个或多个外键属性是不可为空的。 当关系发生变化时,相关的外键 属性设置为空值。如果外键不支持 空值,必须定义一个新的关系,外键 必须为属性分配另一个非空值,或者不相关的 必须删除对象。来源=实体框架
为什么我无法将数据库上下文更改回之前的状态?
编辑:
如何删除依赖项?
workReport.sepapayments.Remove(sepaPayment);
workReportAccountSettlement.workreports.Remove(workReport);
【问题讨论】:
-
如果您需要撤消给定 DBContext 中的更改,您需要以某种方式记住实体的先前值。但除非您使用
SaveChanges()更改数据库中的数据,否则您可以处理 DBContext 并从数据库值创建一个新的 DBContext。 -
我不能这么简单地处理它。我使用 Ioc.var context = unitOfWork.Context 作为 DbContext;
标签: c# sql-server entity-framework