Table<TEntity>.Attach Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.