我想只为某些实体类型覆盖ObjectContext.SaveChanges,并保留其他所有内容的默认行为。我可以找到需要保存的实体,
我试过了,
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
ChangeTracker.Entries<JobField>().ToList().ForEach( c => { /* write data here */ c.State = EntityState.Unchanged; } );
return base.SaveChanges();
}
但是我收到以下错误
数据库的更改已成功提交,但出现错误 更新对象上下文时发生。 ObjectContext可能 处于不一致的状态。内部异常消息:参考 发生完整性约束违规:属性值 定义参照约束之间不一致 关系中的主体和依赖对象。
由于
答案 0 :(得分:2)
您不会先执行任何操作。 EF具有非常严格的状态机,用于改变实体和关系的状态。一旦任何实体处于意外状态(状态机逻辑不允许的状态),在保持任何更改之前将抛出异常。
您可能以不一致的方式进行了一些复杂的更改和修改状态。很难说问题出在哪里,因为您的代码片段没有显示您所做的更改,但是如果您的实体的状态与它们之间的关系状态不一致,则最常发生此异常。 Relations can have also state并且更改跟踪器无法操纵它。