Это действительно полезно в многоуровневых приложениях, которые сериализуют / десериализуют данные в другие слои.
Короткая версия:
Attach()
сообщает DataContext , что сущность не новая (для вставка ), но обновленная сущность, которая должна быть обновлена в БД.
Длинная версия:
У вас есть DataContext , где существуют ваши сущности. Новые сущности вставляются, существующие обновляются. Теперь вам нужно отправить некоторую сущность на другой уровень, DataContext , затем отсоединить указанную сущность и отправить ее.
На другом уровне сущность модифицируется и отправляется обратно на уровень данных. Теперь бывший DataContext , в котором была ваша сущность, может больше не существовать (например, если она не имеет состояния) или не знает вашу десериализованную сущность, так что вы делаете? Вы создаете новый DataContext или используете существующий и используете метод Attach()
- таким образом DataContext знает, что объект должен быть обновлен и должен не вставлено в базу данных.
То же самое относится к AttachAll()
, но для нескольких сущностей.