我只想为某些实体类型覆盖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可能
  处于不一致状态。内部异常消息:引用
  发生违反完整性约束的情况:该属性值
  定义引用约束之间的不一致
  关系中的主要对象和从属对象。



我如何说服一切都很好。
如果有需要通过默认SaveChanges保存的依赖项,我该如何首先执行它们?


谢谢

最佳答案

您将不会首先执行任何操作。 EF具有非常严格的状态机,用于更改实体和关系的状态。一旦任何实体处于意外状态(状态机逻辑不允许的状态),则在持久保存任何更改之前将引发异常。

您可能以不一致的方式进行了一些复杂的更改和修改状态。很难说问题出在哪里,因为您的代码片段未显示有关所做更改的任何信息,但是,如果实体的状态与它们之间的关系状态不一致,则最常发生此异常。 Relations can have also state,并且更改跟踪器无法对其进行操作。

关于c# - EF4.1仅对某些实体类型覆盖SaveChanges,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7116349/

10-12 00:25
查看更多