EF4 обновляет сущность без предварительного получения сущности

Как я могу обновить объект без необходимости вызывать его. Если я поставлю ключ для объекта, не должен ли он обновляться после вызова SaveChanges() в ObjectContext.

В настоящее время я делаю это:

var user = context.Users.Single(u => u.Id == 2);
user.Username = "user.name";
user.Name = "ABC 123";
context.SaveChanges();

Это работает, но заставляет выбрать. Поскольку я знаю Id, почему я не могу сделать что-то вроде этого:

var user = new User();
user.Id = 2;
user.Username = "user.name";
user.Name = "ABC 123";
context.UpdateObject(user);
context.SaveChanges();

Спасибо заранее.

EDIT: Также важно обновить только измененные измененные свойства. Возможно ли это?

Ответ 1

Возможно, следующий код работает нормально.

var user = new User();
user.Id = 2;
context.Users.Attach(user);

user.Username = "user.name";
user.Name = "ABC 123";

context.SaveChanges();

Ответ 2

Вы можете сделать это несколько искусственным способом, добавив объект и изменив EntityState на Modified:

var user = new User();
user.Id = 2;
user.Username = "user.name";
user.Name = "ABC 123";

context.AddToUsers(user);
ObjectStateEntry userEntry = context.ObjectStateManager.GetObjectStateEntry(user);
userEntry.ChangeState(EntityState.Modified);

context.SaveChanges();

Таким образом вы сообщаете ObjectContext, чтобы найти запись с Id = 2 и обновить ее, а не добавлять новую запись в базу данных.

Ответ 3

Разве вам не нужно было его выбирать, чтобы получить данные для редактирования? Если вы его кешируете, вам ничего не будет стоить, когда вы его сохраните.