Объект обновления 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();

Заранее спасибо.

Править: Кроме того, важно, что только затронутые свойства, которые изменяются быть обновленными. Действительно ли это возможно?

11
задан TheCloudlessSky 8 July 2010 в 14:35
поделиться

3 ответа

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

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

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

context.SaveChanges();
12
ответ дан 3 December 2019 в 08:02
поделиться

Вы можете сделать это несколько искусственным способом, добавив сущность и изменив 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 и обновить ее, а не добавлять новую запись в базу данных.

4
ответ дан 3 December 2019 в 08:02
поделиться

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

-1
ответ дан 3 December 2019 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: