Table<TEntity>.Attach Método

Definição

Anexa uma entidade ao DataContext.

Sobrecargas

Name Description
Attach(TEntity)

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

Attach(TEntity, Boolean)

Anexa uma entidade ao DataContext em estado modificado ou não modificado.

Attach(TEntity, TEntity)

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

Observações

Use os Attach métodos com entidades criadas num DataContext, serializadas para um cliente, e depois desserializadas novamente (com a intenção de realizar uma operação de atualização ou eliminação). Para obter mais informações, consulte Recuperação de dados e operações CUD em aplicativos de N camadas (LINQ to SQL).

Não tente com Attach uma entidade que não foi destacada por serialização. Entidades que não foram serializadas mantêm ainda associações com carregadores diferidos que podem causar resultados inesperados se a entidade for rastreada por um segundo contexto de dados.

Quando uma nova entidade é anexada, são inicializados carregadores diferidos para quaisquer coleções filhas (por exemplo, EntitySet coleções de entidades de tabelas associadas). Quando SubmitChanges é chamada, os membros das coleções infantis são colocados num Unmodified estado. Para atualizar membros de uma coleção filha, deve chamar Attach e especificar explicitamente essa entidade.

Attach anexa todas as entidades no grafo 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 AttachEmployee a empregado, mestre e criança, porque tem Employee relações tanto com mestre como com criança. Deve chamar InsertOnSubmit explicitamente para alterar o estado de ligado para inserido.

Attach(TEntity)

Anexa uma entidade desconectada ou "destacada" a uma nova DataContext quando os valores originais são necessários para verificações de concorrência 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

Observações

Use os Attach métodos com entidades criadas num DataContext, serializadas para um cliente, e depois desserializadas novamente para realizar uma operação de atualização ou eliminação. Como o novo DataContext não tem forma de rastrear quais eram os valores originais para uma entidade desconectada, o cliente é responsável por fornecer esses valores. Nesta versão de Attach, assume-se que a entidade está no seu estado de valor original. Depois de chamar este método, pode então atualizar os seus campos, por exemplo, com dados adicionais enviados pelo cliente.

Quando uma nova entidade é anexada, são inicializados carregadores diferidos para quaisquer coleções filhas (por exemplo, EntitySet coleções de entidades de tabelas associadas). Quando SubmitChanges é chamada, os membros das coleções infantis são colocados num Unmodified estado. Para atualizar membros de uma coleção filha, deve chamar Attach e especificar explicitamente essa entidade.

Para obter mais informações, consulte Recuperação de dados e operações CUD em aplicativos de N camadas (LINQ to SQL).

Não tente com Attach uma entidade que não foi destacada por serialização. Entidades que não foram serializadas mantêm ainda associações com carregadores diferidos que podem causar resultados inesperados se a entidade for rastreada por um segundo contexto de dados.

Aplica-se a

Attach(TEntity, Boolean)

Anexa uma entidade ao DataContext em 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 associada.

asModified
Boolean

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

Observações

Se for associado como modificado, a entidade deve ou declarar um membro de versão ou não pode participar na verificação de conflitos de atualização. Quando uma nova entidade é anexada, são inicializados carregadores diferidos para quaisquer coleções filhas (por exemplo, EntitySet coleções de entidades de tabelas associadas). Quando SubmitChanges é chamada, os membros das coleções infantis são colocados num Unmodified estado. Para atualizar membros de uma coleção filha, deve chamar Attach e especificar explicitamente essa entidade.

Aplica-se a

Attach(TEntity, TEntity)

Anexa uma entidade a DataContext um estado modificado ou não modificado, especificando tanto a entidade como o 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 associada.

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

Observações

No exemplo seguinte, o Customer objeto já está corretamente configurado. Podes ligar Attach sem teres de rever as atualizações.

Quando uma nova entidade é anexada, são inicializados carregadores diferidos para quaisquer coleções filhas (por exemplo, EntitySet coleções de entidades de tabelas associadas). Quando SubmitChanges é chamada, os membros das coleções infantis são colocados num Unmodified estado. Para atualizar membros de uma coleção filha, deve chamar Attach e especificar explicitamente essa entidade.

Aplica-se a