Table<TEntity>.Attach Método

Definição

Anexa uma entidade ao DataContext.

Sobrecargas

Nome Description
Attach(TEntity)

Anexa uma entidade desconectada ou "desanexada" a uma nova DataContext quando os valores originais são necessários para verificações de simultaneidade otimistas.

Attach(TEntity, Boolean)

Anexa uma entidade a DataContext um estado modificado ou não modificado.

Attach(TEntity, TEntity)

Anexa uma entidade a DataContext um estado modificado ou não modificado especificando a entidade e seu estado original.

Comentários

Use os Attach métodos com entidades que foram criadas em um, DataContextserializados para um cliente e, em seguida, desserializados novamente (com a intenção de executar uma operação de atualização ou exclusão). Para mais informações, consulte Recuperação de Dados e Operações CUD em Aplicações N-Tier (LINQ to SQL).

Não tente uma Attach entidade que não tenha sido desanexada por meio da serialização. Entidades que não foram serializadas ainda mantêm associações com carregadores adiados que podem causar resultados inesperados se a entidade for controlada por um segundo contexto de dados.

Quando uma nova entidade é anexada, os carregadores adiados para quaisquer coleções filho (por exemplo, EntitySet coleções de entidades de tabelas associadas) são inicializados. Quando SubmitChanges é chamado, os membros das coleções filho são colocados em um Unmodified estado. Para atualizar os membros de uma coleção filho, você deve chamar Attach explicitamente e especificar essa entidade.

Attach anexa todas as entidades no grafo de objeto do objeto fornecido. Por exemplo:

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

Chamar Attach anexa Employee o funcionário, o mestre e o filho, porque ele Employee tem relações com o mestre e o filho. Você deve chamar InsertOnSubmit explicitamente para alterar o estado de anexado para inserido.

Attach(TEntity)

Anexa uma entidade desconectada ou "desanexada" a uma nova DataContext quando os valores originais são necessários para verificações de simultaneidade otimistas.

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)

Parâmetros

entity
TEntity

Os valores originais da entidade a ser anexada.

Implementações

Comentários

Use os Attach métodos com entidades que foram criadas em um, DataContextserializados para um cliente e, em seguida, desserializados novamente para executar uma operação de atualização ou exclusão. Como o novo DataContext não tem como acompanhar quais eram os valores originais de uma entidade desconectada, o cliente é responsável por fornecer esses valores. Nesta versão de Attach, supõe-se que a entidade esteja em seu estado de valor original. Depois de chamar esse método, você pode atualizar seus campos, por exemplo, com dados adicionais enviados do cliente.

Quando uma nova entidade é anexada, os carregadores adiados para quaisquer coleções filho (por exemplo, EntitySet coleções de entidades de tabelas associadas) são inicializados. Quando SubmitChanges é chamado, os membros das coleções filho são colocados em um Unmodified estado. Para atualizar os membros de uma coleção filho, você deve chamar Attach explicitamente e especificar essa entidade.

Para mais informações, consulte Recuperação de Dados e Operações CUD em Aplicações N-Tier (LINQ to SQL).

Não tente uma Attach entidade que não tenha sido desanexada por meio da serialização. Entidades que não foram serializadas ainda mantêm associações com carregadores adiados que podem causar resultados inesperados se a entidade for controlada por um segundo contexto de dados.

Aplica-se a

Attach(TEntity, Boolean)

Anexa uma entidade a DataContext um estado modificado ou não modificado.

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)

Parâmetros

entity
TEntity

A entidade a ser anexada.

asModified
Boolean

true para anexar a entidade como modificada; false para anexar a entidade como não modificada.

Comentários

Se a anexação for modificada, a entidade deverá declarar um membro de versão ou não deve participar da verificação de conflitos de atualização. Quando uma nova entidade é anexada, os carregadores adiados para quaisquer coleções filho (por exemplo, EntitySet coleções de entidades de tabelas associadas) são inicializados. Quando SubmitChanges é chamado, os membros das coleções filho são colocados em um Unmodified estado. Para atualizar os membros de uma coleção filho, você deve chamar Attach explicitamente e especificar essa entidade.

Aplica-se a

Attach(TEntity, TEntity)

Anexa uma entidade a DataContext um estado modificado ou não modificado especificando a entidade e seu estado original.

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)

Parâmetros

entity
TEntity

A entidade a ser anexada.

original
TEntity

Uma instância do mesmo tipo de entidade com membros de dados que contêm os valores originais.

Exemplos

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

Comentários

No exemplo a seguir, o Customer objeto já está configurado corretamente. Você pode ligar Attach sem precisar reproduzir as atualizações.

Quando uma nova entidade é anexada, os carregadores adiados para quaisquer coleções filho (por exemplo, EntitySet coleções de entidades de tabelas associadas) são inicializados. Quando SubmitChanges é chamado, os membros das coleções filho são colocados em um Unmodified estado. Para atualizar os membros de uma coleção filho, você deve chamar Attach explicitamente e especificar essa entidade.

Aplica-se a