Ler em inglês

Partilhar via


Table<TEntity>.Attach Método

Definição

Anexa uma entidade ao DataContext.

Sobrecargas

Attach(TEntity)

Anexa uma entidade desconectada ou “desanexada” a um novo DataContext quando os valores originais são necessários para verificações de simultaneidade otimista.

Attach(TEntity, Boolean)

Anexa uma entidade ao DataContext em um estado modificado ou inalterado.

Attach(TEntity, TEntity)

Anexa uma entidade para o DataContext em 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 DataContext, serializados para um cliente e desserializados novamente (com a intenção de executar uma operação de atualização ou exclusão). Para ter mais informações, consulte Recuperação de dados e operações de CUD em aplicativos de N Camadas (LINQ to SQL).

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

Quando uma nova entidade é anexada, 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:

C#
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();  
} 

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

Attach(TEntity)

Anexa uma entidade desconectada ou “desanexada” a um novo DataContext quando os valores originais são necessários para verificações de simultaneidade otimista.

C#
public void Attach (TEntity entity);

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 DataContext, serializados para um cliente e 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 do 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, 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 ter mais informações, consulte Recuperação de dados e operações de CUD em aplicativos de N Camadas (LINQ to SQL).

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

Aplica-se a

.NET Framework 4.8.1 e outras versões
Produto Versões
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Attach(TEntity, Boolean)

Anexa uma entidade ao DataContext em um estado modificado ou inalterado.

C#
public void Attach (TEntity entity, bool asModified);

Parâmetros

entity
TEntity

A entidade a ser anexada.

asModified
Boolean

true para anexar a entidade como modificada; false anexar a entidade como inalterada.

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, 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

.NET Framework 4.8.1 e outras versões
Produto Versões
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Attach(TEntity, TEntity)

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

C#
public void Attach (TEntity entity, TEntity original);

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

C#
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();
}

Comentários

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

Quando uma nova entidade é anexada, 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

.NET Framework 4.8.1 e outras versões
Produto Versões
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1