Принудительное использование кода EF 4.1, чтобы сначала увидеть присоединенный объект как измененный

Все примеры, которые я нашел, относятся к классу ObjectContext, которого, похоже, нет в CTP5. Я должен подчеркнуть, что CTP5 - это мое первое знакомство с Entity Framework.

У меня есть отключенный POCO, который я прикрепил к моему DbContext. SaveChanges не принимает изменения, Для большинства это может быть очевидным, но как первый пользователь EF мне не приходило в голову, что присоединение уже прикрепленного объекта приведет к очистке предыдущего состояния. Это причинило мне много боли. Но я хотел использовать шаблон репозитория в очень общем виде, не заботясь о том, был ли объект уже присоединен или был недавно создан в результате привязки ASP.NET MVC. Поэтому мне понадобился метод UpdateUser , и я прикрепил его ниже.

    public User UpdateUser(User user) {
        if (_context.Entry(user).State == EntityState.Detached) {
            _context.Users.Attach(user);
            _context.Entry(user).State = EntityState.Modified;
        }
        return user;
    }

Метод, очевидно, предполагает, что объект существует в хранилище данных каким-то образом, он называется UpdateUser после все. Если объект уже прикреплен, вы получите выгоду от предыдущего состояния объекта, что, в свою очередь, позволит оптимизировать обновление БД. Однако, если объект не был прикреплен, метод заставляет все испачкаться.

Кажется очевидным сейчас, не было раньше. Надеюсь, это кому-то поможет.

Rich

21
задан Morteza Manavi 15 June 2011 в 15:38
поделиться