Как я могу обновить объект, не имея необходимость звонить для выбора его. Если я предоставляю ключ для объекта, должен он не знать для обновления после того, как 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();
Заранее спасибо.
Править: Кроме того, важно, что только затронутые свойства, которые изменяются быть обновленными. Действительно ли это возможно?
Возможно, следующий код работает нормально.
var user = new User();
user.Id = 2;
context.Users.Attach(user);
user.Username = "user.name";
user.Name = "ABC 123";
context.SaveChanges();
Вы можете сделать это несколько искусственным способом, добавив сущность и изменив 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 и обновить ее, а не добавлять новую запись в базу данных.
Вам все равно не пришлось выбирать его, чтобы данные можно было редактировать? Если вы кешируете его, вам ничего не будет стоить получить его снова при сохранении.