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:

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

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

Attach(TEntity, Boolean)

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

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

Attach(TEntity, TEntity)

Anexa uma entidade para o DataContext em 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 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