Подтвердить что ты не робот

Что такое таблица LINQ to SQL? <T>.Attach?

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

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

4b9b3361

Ответ 1

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

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

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

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

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

То же самое относится к AttachAll(), но для нескольких объектов.

Ответ 2

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

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