EF4 Обновление объекта без первого получения объекта - PullRequest
11 голосов
/ 08 июля 2010

Как я могу обновить сущность без необходимости звонить, чтобы выбрать ее.Если я предоставляю ключ для сущности, если он не знает, что нужно обновить после вызова 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();

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

РЕДАКТИРОВАТЬ: Кроме того, важно, чтобы только измененные затронутые свойства будут обновлены.Это возможно?

Ответы [ 3 ]

12 голосов
/ 08 июля 2010

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

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

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

context.SaveChanges();
4 голосов
/ 08 июля 2010

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

0 голосов
/ 08 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...