Table<TEntity>.Attach Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.