Все примеры, которые я нашел, относятся к классу 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