Table<TEntity>.Attach Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Присоединяет сущность к DataContext.
Перегрузки
Attach(TEntity) |
Присоединяет отключенную или "отсоединенную" сущность к новому контексту DataContext, когда исходные значения необходимы для проверок оптимистичного параллелизма. |
Attach(TEntity, Boolean) |
Присоединяет сущность к DataContext в измененном или неизмененном состоянии. |
Attach(TEntity, TEntity) |
Присоединяет сущность к DataContext в измененном или неизмененном состоянии, указывая сущность и ее исходное состояние. |
Комментарии
Attach
Используйте методы с сущностями, которые были созданы в одном DataContextобъекте , сериализованы в клиент, а затем десериализируются обратно (с целью выполнения операции обновления или удаления). Дополнительные сведения см. в статье Извлечение данных и операции CUD в N-уровневых приложениях (LINQ to SQL).
Не пытайтесь подключиться к Attach
сущности, которая не была отсоединены с помощью сериализации. Сущности, которые не были сериализованы, по-прежнему поддерживают связи с отложенными загрузчиками, которые могут привести к непредвиденным результатам, если сущность будет отслеживаться вторым контекстом данных.
При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet
коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified
переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach
и указать эту сущность.
Attach
присоединяет все сущности в графе объектов предоставленного объекта. Пример:
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
Employee
Вызов Attach
прикрепляет сотрудника, master и ребенка, так как Employee
имеет отношение как к master, так и к дочернему. Необходимо явно вызвать , InsertOnSubmit
чтобы изменить состояние с присоединенного на вставленное.
Attach(TEntity)
Присоединяет отключенную или "отсоединенную" сущность к новому контексту DataContext, когда исходные значения необходимы для проверок оптимистичного параллелизма.
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)
Параметры
- entity
- TEntity
Исходные значения объекта, которые следует прикрепить.
Реализации
Комментарии
Attach
Используйте методы с сущностями, которые были созданы в одном DataContextобъекте , сериализованы в клиент, а затем десериализируются обратно, чтобы выполнить операцию обновления или удаления. Так как новый DataContext не может отслеживать исходные значения для отключенной сущности, клиент отвечает за предоставление этих значений. В этой версии Attachпредполагается, что сущность находится в исходном состоянии значения. После вызова этого метода можно обновить его поля, например, с помощью дополнительных данных, отправленных от клиента.
При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet
коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified
переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach
и указать эту сущность.
Дополнительные сведения см. в статье Извлечение данных и операции CUD в N-уровневых приложениях (LINQ to SQL).
Не пытайтесь подключиться к Attach
сущности, которая не была отсоединены с помощью сериализации. Сущности, которые не были сериализованы, по-прежнему поддерживают связи с отложенными загрузчиками, которые могут привести к непредвиденным результатам, если сущность будет отслеживаться вторым контекстом данных.
Применяется к
Attach(TEntity, Boolean)
Присоединяет сущность к DataContext в измененном или неизмененном состоянии.
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)
Параметры
- entity
- TEntity
Сущность, которая будет прикреплена.
- asModified
- Boolean
Значение true
, чтобы вложить сущность как измененную; значение false
, чтобы вложить сущность как неизмененную.
Комментарии
При присоединении как измененном объект должен либо объявить член версии, либо не должен участвовать в проверке конфликтов обновлений. При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet
коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified
переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach
и указать эту сущность.
Применяется к
Attach(TEntity, TEntity)
Присоединяет сущность к DataContext в измененном или неизмененном состоянии, указывая сущность и ее исходное состояние.
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)
Параметры
- entity
- TEntity
Сущность, которая будет прикреплена.
- original
- TEntity
Экземпляр того же типа сущности с элементами данных, которые содержат исходные значения.
Примеры
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
Комментарии
В следующем примере Customer
объект уже правильно настроен. Вы можете вызвать Attach
без повторного воспроизведения обновлений.
При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet
коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified
переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach
и указать эту сущность.