Table<TEntity>.AttachAll Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Присоединяет все сущности коллекции к DataContext измененным или неизмененному состоянию.
Перегрузки
| Имя | Описание |
|---|---|
| AttachAll<TSubEntity>(IEnumerable<TSubEntity>) |
Присоединяет все сущности коллекции к DataContext измененным или неизмененному состоянию. |
| AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean) |
Присоединяет все сущности коллекции к DataContext измененным или неизмененному состоянию. |
Комментарии
При присоединении как измененного сущность должна объявлять член версии или не участвовать в проверке конфликтов обновлений.
При присоединении новой сущности инициализируются отложенные загрузчики для любых дочерних коллекций (например, EntitySet коллекции сущностей из связанных таблиц). При SubmitChanges вызове члены дочерних коллекций Unmodified помещаются в состояние. Чтобы обновить члены дочерней коллекции, необходимо явно вызвать Attach и указать эту сущность.
Дополнительные сведения см. в разделе "Извлечение данных и операции CUD в многоуровневых приложениях (LINQ to SQL).
AttachAll<TSubEntity>(IEnumerable<TSubEntity>)
Присоединяет все сущности коллекции к DataContext измененным или неизмененному состоянию.
public:
generic <typename TSubEntity>
where TSubEntity : TEntity void AttachAll(System::Collections::Generic::IEnumerable<TSubEntity> ^ entities);
public void AttachAll<TSubEntity>(System.Collections.Generic.IEnumerable<TSubEntity> entities) where TSubEntity : TEntity;
member this.AttachAll : seq<#'Entity> -> unit
Public Sub AttachAll(Of TSubEntity As TEntity) (entities As IEnumerable(Of TSubEntity))
Параметры типа
- TSubEntity
Тип сущностей для присоединения.
Параметры
- entities
- IEnumerable<TSubEntity>
Коллекция сущностей.
Комментарии
Этот метод присоединяет все сущности коллекции к новой DataContext. При присоединении новой сущности инициализируются отложенные загрузчики для любых дочерних коллекций (например, EntitySet коллекции сущностей из связанных таблиц). При SubmitChanges вызове члены дочерних коллекций Unmodified помещаются в состояние. Чтобы обновить члены дочерней коллекции, необходимо явно вызвать Attach и указать эту сущность.
Дополнительные сведения см. в разделе "Извлечение данных и операции CUD в многоуровневых приложениях (LINQ to SQL).
Применяется к
AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean)
Присоединяет все сущности коллекции к DataContext измененным или неизмененному состоянию.
public:
generic <typename TSubEntity>
where TSubEntity : TEntity void AttachAll(System::Collections::Generic::IEnumerable<TSubEntity> ^ entities, bool asModified);
public void AttachAll<TSubEntity>(System.Collections.Generic.IEnumerable<TSubEntity> entities, bool asModified) where TSubEntity : TEntity;
member this.AttachAll : seq<#'Entity> * bool -> unit
Public Sub AttachAll(Of TSubEntity As TEntity) (entities As IEnumerable(Of TSubEntity), asModified As Boolean)
Параметры типа
- TSubEntity
Тип сущностей для присоединения.
Параметры
- entities
- IEnumerable<TSubEntity>
Коллекция сущностей.
- asModified
- Boolean
true Значение , если объект имеет метку времени или элемент RowVersion; false Если исходные значения используются для проверки оптимистического параллелизма.
Примеры
В следующем примере показано, как обновить Order объект в другом DataContext экземпляре. В примере предполагается, что у вас есть подключение к базе данных и для него был создан файл LINQ to SQL (в данном случае пример базы данных Northwind).
using (Northwnd db = new Northwnd(@"c:\northwnd.mdf"))
{
// Get original Customer from deserialization.
var q1 = db.Orders.First();
string serializedQ = SerializeHelper.Serialize(q1);
var q2 = SerializeHelper.Deserialize(serializedQ, q1);
// Track this object for an update (not insert).
db.Orders.Attach(q2, false);
// Replay the changes.
q2.ShipRegion = "King";
q2.ShipAddress = "1 Microsoft Way";
// DataContext knows how to update the order.
db.SubmitChanges();
}
Using db As New Northwnd("")
' Get original Customer from deserialization.
Dim q1 = db.Orders.First()
Dim serializedQ As String = SerializeHelper.Serialize(q1)
Dim q2 = SerializeHelper.Deserialize(serializedQ, q1)
' Track this object for an update (not insert).
db.Orders.Attach(q2, False)
' Replay the changes.
q2.ShipRegion = "King"
q2.ShipAddress = "1 Microsoft Way"
' DataContext knows how to update the order.
db.SubmitChanges()
End Using
В следующем примере присоединенный объект сущности имеет отношение внешнего ключа к другому объекту и хранится в кэше, но не подключен. При вызове SubmitChangesChangeProcessor операция добавляет Insert операцию для всех объектов внешнего ключа. Это побочный эффект, когда экземпляр сущности повторно используется в другом DataContext экземпляре. По этой причине LINQ to SQL не поддерживает повторное использование объектов.
Customer c = null;
using (Northwnd db = new Northwnd(""))
{
/* Get both the customer c and the customer's order
into the cache. */
c = db.Customers.First();
string sc = c.Orders.First().ShipCity;
}
using (Northwnd nw2 = new Northwnd(""))
{
// Attach customers and update the address.
nw2.Customers.Attach(c, false);
c.Address = "new";
nw2.Log = Console.Out;
/* At SubmitChanges, you will see INSERT requests for all
Customer c’s orders. */
nw2.SubmitChanges();
}
Sub method7()
Dim c As Customer = Nothing
Using db = New Northwnd("...")
' Get both the customer c and the customer's order
' into the cache.
c = db.Customers.First()
Dim sc = c.Orders.First().ShipCity
End Using
Using nw2 = New Northwnd("...")
' Attach customers and update the address.
nw2.Customers.Attach(c, False)
c.Address = "new"
nw2.Log = Console.Out
' At SubmitChanges, you will see INSERT requests for all
' c's orders.
nw2.SubmitChanges()
End Using
В следующем примере показан сценарий, в котором Customer A отменил все заказы, и клиент B взял на себя ответственность за них. Вы можете вложить все заказы Customer A одновременно.
Customer CustA_File = new Customer();
Customer CustB_File = new Customer();
string xmlFileA = "";
string xmlFileB = "";
// Get the serialized objects.
Customer A = SerializeHelper.Deserialize<Customer>(xmlFileA, CustA_File);
Customer B = SerializeHelper.Deserialize<Customer>(xmlFileB, CustB_File);
List<Order> AOrders = A.Orders.ToList();
using (Northwnd db = new Northwnd(@"c:\northwnd.mdf"))
{
//Attach all the orders belonging to Customer A all at once.
db.Orders.AttachAll(AOrders, false);
// Update the orders belonging to Customer A to show them
// as owned by Customer B.
foreach (Order o in AOrders)
{
o.CustomerID = B.CustomerID;
}
// DataContext can now apply the change of ownership to
// the database.
db.SubmitChanges();
}
Dim custA_File = New Customer()
Dim custB_File = New Customer()
Dim xmlFileA As String = ""
Dim xmlFileB As String = ""
' Get the serialized objects.
Dim A As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFileA, custA_File)
Dim B As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFileB, custB_File)
Dim AOrders As List(Of Order) = A.Orders.ToList()
Using db As New Northwnd("...")
'Attach all the orders belonging to Customer A all at once.
db.Orders.AttachAll(AOrders, False)
' Update the orders belonging to Customer A to show them
' as owned by Customer B
For Each o In AOrders
o.CustomerID = B.CustomerID
Next
' DataContext can now apply the change of ownership to
'the database
db.SubmitChanges()
End Using
Комментарии
Этот метод присоединяет все сущности коллекции к DataContext измененным или неизмененному состоянию. При присоединении как измененного сущность должна объявлять член версии или не участвовать в проверке конфликтов обновлений. Если присоединение как не измененное, предполагается, что сущность представляет исходное значение. После вызова этого метода поля сущности можно изменить с другими сведениями от клиента до SubmitChanges вызова. Дополнительные сведения см. в разделе "Извлечение данных и операции CUD в многоуровневых приложениях (LINQ to SQL).
При присоединении новой сущности инициализируются отложенные загрузчики для любых дочерних коллекций (например, EntitySet коллекции сущностей из связанных таблиц). При SubmitChanges вызове члены дочерних коллекций Unmodified помещаются в состояние. Чтобы обновить члены дочерней коллекции, необходимо явно вызвать Attach и указать эту сущность.