EF4.1 переопределяет SaveChanges только для определенных типов объектов - PullRequest
2 голосов
/ 19 августа 2011

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

Спасибо

1 Ответ

2 голосов
/ 19 августа 2011

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

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

...