EF4.1 переопределяет SaveChanges только для определенных типов сущностей.

Я хочу переопределить 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 по умолчанию, как их выполнить в первую очередь?

Спасибо


person Greg Bacchus    schedule 19.08.2011    source источник


Ответы (1)


Вы ничего не будете выполнять первым. EF имеет очень строгую конечную машину для изменения состояния сущностей и отношений. Как только какой-либо объект находится в неожиданном состоянии (состояние, не разрешенное логикой конечного автомата), исключение будет выдано до того, как будут сохранены какие-либо изменения.

Вы, вероятно, сделали какие-то сложные изменения и изменили состояния непоследовательным образом. Трудно сказать, в чем проблема, потому что ваш фрагмент кода ничего не показывает об изменениях, которые вы сделали, но это исключение чаще всего происходит, если состояние ваших сущностей не соответствует состоянию отношений между ними. Отношения также могут иметь состояние и трекер изменений не может им манипулировать.

person Ladislav Mrnka    schedule 19.08.2011