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