EF4.1仅覆盖某些实体类型的SaveChanges

时间:2011-08-19 02:31:57

标签: c# entity-framework-4 ef-code-first

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

  1. 我如何说服一切都好。
  2. 如果默认的SaveChanges需要保存依赖项,我该如何先执行它们?
  3. 由于

1 个答案:

答案 0 :(得分:2)

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

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