Что делает LINQ-to-SQL Table <T>.Attach? - PullRequest
17 голосов
/ 09 марта 2011

Что именно означает метод LINQ-to-SQL Table<T>.Attach() и Table<T>.AttachAll() и каков пример / ситуация для их правильного использования?

Также, пожалуйста, проверьте этот связанный вопрос: Как отсоединить объект данных LINQ-to-SQL от механизма отслеживания DataContext?

Ответы [ 2 ]

18 голосов
/ 09 марта 2011

Это действительно полезно в многоуровневых приложениях, которые сериализуют / десериализуют данные в другие слои.

Короткая версия:

Attach() сообщает DataContext , что сущность не новая (для вставка ), но обновленная сущность, которая должна быть обновлена ​​ в БД.

Длинная версия:

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

То же самое относится к AttachAll(), но для нескольких сущностей.

4 голосов
/ 09 марта 2011

LINQ to SQL поддерживает состояние сущностей в объекте DataContext. Объекты, загруженные из базы данных, связаны с DataContext, который отвечает за отслеживание любых изменений в объекте, поэтому при его сохранении соответствующие изменения вносятся в базу данных.

Объекты могут отсоединяться от DataContext при сериализации (для передачи клиенту, например, в приложении n-уровня). Когда клиент возвращает сущность обратно на уровень DA, вам необходимо повторно присоединить его к DataContext, прежде чем его можно будет обновить или удалить в базе данных. Метод Attach выполняет эту операцию.

...