Все примеры, которые я нашел, относятся к классу ObjectContext, который, как представляется, не существует в CTP5. Я должен подчеркнуть, что CTP5 - это мое первое знакомство с Entity Framework.
У меня отключен POCO, который я привязал к своему DbContext. SaveChanges не получает изменения, хотя, как я рассказываю, что мой контекст обновляет этот объект?
_context.Users.Attach(user);
// The user has been replaced.
_context.SaveChanges();
// The change is not saved.
Что я делаю неправильно?
Обновление 12/01/2011
Возможно, это будет очевидно для большинства, но как первый пользователь 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
в конце концов. Если объект уже подключен, вы получите преимущество от предыдущего состояния объекта, что, в свою очередь, позволит оптимизировать обновление БД. Однако, если объект не был прикреплен, метод заставляет все это стать грязным.
Кажется очевидным сейчас, не было раньше. Надеюсь, это поможет кому-то.
Рич