Entity Framework проблемы SaveChanges - PullRequest
       4

Entity Framework проблемы SaveChanges

0 голосов
/ 28 февраля 2012

У меня возникли проблемы с DbContext.SaveChanges();

У меня есть таблица CAR, в которой есть FK для таблицы ENGINE (свойство Engine имеет атрибут [Обязательный]).Также я реализовал общий репозиторий с методом обновления.

 class Repo<T> where T : IArchivable{
      ...
      public void update(T row){
          row.Deleted = true; //Deleted is from interface IArchivable
          ctx.SaveChange();
      }
      .....
      public T Single(System.Linq.Expressions.Expression<Func<T, bool>> condition){
          return ctx.Set<T>().where<T>(condition);
      }
 }

в случае:

      ....
      Repo<CAR> r = new Repo<CAR>();
      CAR car = r.Single(o => o.id == 1);
      r.update(car); 

Я получу ошибку «Проверка не удалась для одного или нескольких объектов. ...» Я проверил этои проблема в том, что свойство ENGINE требуется, но для

      ....
      Repo<CAR> r = new Repo<CAR>();
      CAR car = r.Single(o => o.id == 1);
      car.Engine = car.Engine;
      r.update(car); 

оно будет работать.

Как это исправить?

1 Ответ

1 голос
/ 28 февраля 2012

Удалить атрибут Required из свойства навигации или отключить проверку на уровне данных.

context.Configurations.ValidateOnSaveEnabled = false;

Причина, по которой он работает во втором случае, заключается в том, что вы обращаетесь к свойству Engine, и EF будет использовать отложенную загрузку для загрузки его из базы данных, но в первом случае ваш код не имеет доступа к свойству ивнутреннее поведение в EF не вызывает его, чтобы избежать неожиданных обращений к базе данных во время операции сохранения.

...