Поделиться через


Table<TEntity>.Attach Метод

Определение

Присоединяет сущность к DataContext.

Перегрузки

Attach(TEntity)

Присоединяет отключенную или "отсоединенную" сущность к новому контексту DataContext, когда исходные значения необходимы для проверок оптимистичного параллелизма.

Attach(TEntity, Boolean)

Присоединяет сущность к DataContext в измененном или неизмененном состоянии.

Attach(TEntity, TEntity)

Присоединяет сущность к DataContext в измененном или неизмененном состоянии, указывая сущность и ее исходное состояние.

Комментарии

Attach Используйте методы с сущностями, которые были созданы в одном DataContextобъекте , сериализованы в клиент, а затем десериализируются обратно (с целью выполнения операции обновления или удаления). Дополнительные сведения см. в статье Извлечение данных и операции CUD в N-уровневых приложениях (LINQ to SQL).

Не пытайтесь подключиться к Attach сущности, которая не была отсоединены с помощью сериализации. Сущности, которые не были сериализованы, по-прежнему поддерживают связи с отложенными загрузчиками, которые могут привести к непредвиденным результатам, если сущность будет отслеживаться вторым контекстом данных.

При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach и указать эту сущность.

Attach присоединяет все сущности в графе объектов предоставленного объекта. Пример:

using (var db = new SampleDataContext())
{  
    var employee = new Employee { employeeId = 1 };  

    var master = new Master();  
    master.Employee = employee;  

    var child = new Child();  
    child.Employee = employee;  

    db.Employees.Attach(employee);  

    master.Child = child;  

    db.Masters.InsertOnSubmit(master);  

    db.SubmitChanges();  
} 
Using db As New SampleDataContext()
    Dim employee As New Employee With { .employeeId = 1 }

    Dim master As New Master()  
    master.Employee = employee  

    Dim child As New Child()  
    child.Employee = employee  

    db.Employees.Attach(employee)  

    master.Child = child  

    db.Masters.InsertOnSubmit(master)  

    db.SubmitChanges()  

End Using  

Employee Вызов Attach прикрепляет сотрудника, master и ребенка, так как Employee имеет отношение как к master, так и к дочернему. Необходимо явно вызвать , InsertOnSubmit чтобы изменить состояние с присоединенного на вставленное.

Attach(TEntity)

Присоединяет отключенную или "отсоединенную" сущность к новому контексту DataContext, когда исходные значения необходимы для проверок оптимистичного параллелизма.

public:
 void Attach(TEntity entity);
public:
 virtual void Attach(TEntity entity);
public void Attach (TEntity entity);
member this.Attach : 'Entity -> unit
abstract member Attach : 'Entity -> unit
override this.Attach : 'Entity -> unit
Public Sub Attach (entity As TEntity)

Параметры

entity
TEntity

Исходные значения объекта, которые следует прикрепить.

Реализации

Комментарии

Attach Используйте методы с сущностями, которые были созданы в одном DataContextобъекте , сериализованы в клиент, а затем десериализируются обратно, чтобы выполнить операцию обновления или удаления. Так как новый DataContext не может отслеживать исходные значения для отключенной сущности, клиент отвечает за предоставление этих значений. В этой версии Attachпредполагается, что сущность находится в исходном состоянии значения. После вызова этого метода можно обновить его поля, например, с помощью дополнительных данных, отправленных от клиента.

При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach и указать эту сущность.

Дополнительные сведения см. в статье Извлечение данных и операции CUD в N-уровневых приложениях (LINQ to SQL).

Не пытайтесь подключиться к Attach сущности, которая не была отсоединены с помощью сериализации. Сущности, которые не были сериализованы, по-прежнему поддерживают связи с отложенными загрузчиками, которые могут привести к непредвиденным результатам, если сущность будет отслеживаться вторым контекстом данных.

Применяется к

Attach(TEntity, Boolean)

Присоединяет сущность к DataContext в измененном или неизмененном состоянии.

public:
 void Attach(TEntity entity, bool asModified);
public void Attach (TEntity entity, bool asModified);
member this.Attach : 'Entity * bool -> unit
Public Sub Attach (entity As TEntity, asModified As Boolean)

Параметры

entity
TEntity

Сущность, которая будет прикреплена.

asModified
Boolean

Значение true, чтобы вложить сущность как измененную; значение false, чтобы вложить сущность как неизмененную.

Комментарии

При присоединении как измененном объект должен либо объявить член версии, либо не должен участвовать в проверке конфликтов обновлений. При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach и указать эту сущность.

Применяется к

Attach(TEntity, TEntity)

Присоединяет сущность к DataContext в измененном или неизмененном состоянии, указывая сущность и ее исходное состояние.

public:
 void Attach(TEntity entity, TEntity original);
public void Attach (TEntity entity, TEntity original);
member this.Attach : 'Entity * 'Entity -> unit
Public Sub Attach (entity As TEntity, original As TEntity)

Параметры

entity
TEntity

Сущность, которая будет прикреплена.

original
TEntity

Экземпляр того же типа сущности с элементами данных, которые содержат исходные значения.

Примеры

using (Northwnd db2 = new Northwnd(@"c:\northwnd.mdf"))
{
    Customer Cust_File = new Customer();
    string xmlFile = "";

    // Get the original object from the deserializer.
    Customer c = SerializeHelper.Deserialize<Customer>
        (xmlFile, Cust_File);

    // Set all the desired properties to the entity to be attached.
    Customer c_updated = new Customer() { CustomerID = c.CustomerID,
        Phone = "425-123-4567", CompanyName = "Microsoft" };
    db2.Customers.Attach(c_updated, c);

    // Perform last minute updates, which will still take effect.
    c_updated.Phone = "425-765-4321";

    // SubmitChanges()sets the phoneNumber and CompanyName of
    // customer with customerID=Cust. to "425-765-4321" and
    // "Microsoft" respectively.
    db2.SubmitChanges();
}
Using db = New Northwnd("...")
    Dim Cust_File As New Customer()
    Dim xmlFile As String = ""

    'Get the original object from the deserializer.
    Dim c As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFile, Cust_File)

    ' Set all the desired properties to the entity to be attached.
    Dim c_updated As New Customer With {.CustomerID = c.CustomerID, _
    .Phone = "425-123-4567", .CompanyName = "Microsoft"}
    db.Customers.Attach(c_updated, c)

    ' Perform last minute updates, which will still take effect. 
    c_updated.Phone = "425-765-4321"

    ' SubmitChanges()sets the phoneNumber and CompanyName of
    ' customer with customerID=Cust. to "425-765-4321" and
    ' "Microsoft" respectively.
    db.SubmitChanges()
End Using

Комментарии

В следующем примере Customer объект уже правильно настроен. Вы можете вызвать Attach без повторного воспроизведения обновлений.

При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach и указать эту сущность.

Применяется к