2010-11-23 4 views
2

в EF1, я не мог просто обновить объект, который был построен (с правильным id) вне области ObjectContext.Сохранить отключенный объект в структуре сущности 4

Есть ли новый способ в EF4?

Могу ли я просто добавить его в контекст (context.AddOrder(order)) (где context - экземпляр объекта ObjectContext), и он видит, что он имеет идентификатор и обновляет его?

Это не-росо, так что мои объекты происходят из EntityObject

ответ

2

Используйте Attach method вместо этого. Он предназначен для отключенных объектов.

+0

я» n Не уверен, у меня есть новый объект, а метод attach - для объектов, когда объект имеет ключ сущности. У меня есть ключ объекта, когда я просто устанавливаю свойства объекта? – Michel 2010-11-23 14:06:59

5

Если это новый объект, то вы должны использовать либо ObjectContext.AddObject или ObjectSet.AddObject:
AddObject метод для добавления вновь созданных объектов, которые делают не существует в базе данных. Предприятие получит автоматически созданное временное EntityKey и его EntityState будет установлено в Added.

С другой стороны ObjectContext.Attach и ObjectSet.Attach используется для объектов, которые уже существуют в базе данных. Вместо того, чтобы устанавливать EntityState для добавления, присоедините результаты к Unchanged EntityState, что означает, что он не изменился с момента его привязки к контексту. Предполагается, что объекты, которые вы прикрепляете, существуют в базе данных.

Для более детального обсуждения по этой теме, пожалуйста, посмотрите на это сообщение:
Entity Framework 4 - AddObject vs Attach

1

Взятые из Employee Info Starter Kit, вы можете рассмотреть фрагмент кода, как показано ниже:

public void UpdateEmployee(Employee updatedEmployee) 
     { 
      //attaching and making ready for parsistance 
      if (updatedEmployee.EntityState == EntityState.Detached) 
       _DatabaseContext.Employees.Attach(updatedEmployee); 
      _DatabaseContext.ObjectStateManager.ChangeObjectState(updatedEmployee, System.Data.EntityState.Modified); 
      _DatabaseContext.SaveChanges(); 
     } 
Смежные вопросы