Table<TEntity>.AttachAll Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Присоединяет все элементы коллекции к DataContext в измененном или неизмененном состоянии.
Перегрузки
AttachAll<TSubEntity>(IEnumerable<TSubEntity>) |
Присоединяет все элементы коллекции к DataContext в измененном или неизмененном состоянии. |
AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean) |
Присоединяет все элементы коллекции к DataContext в измененном или неизмененном состоянии. |
Комментарии
При присоединении как измененном сущность должна либо объявить член версии, либо не должна участвовать в проверке конфликтов обновлений.
При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet
коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified
переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach
и указать эту сущность.
Дополнительные сведения см. в разделе Извлечение данных и операции CUD в N-уровневых приложениях (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 в N-уровневых приложениях (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
В следующем примере показан сценарий, в котором клиент А отменил все заказы, а клиент Б взял на себя ответственность за них. Вы можете прикрепить все заказы клиента 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 в N-уровневых приложениях (LINQ to SQL).
При присоединении новой сущности инициализируются отложенные загрузчики для всех дочерних коллекций (например, EntitySet
коллекций сущностей из связанных таблиц). При SubmitChanges вызове метода члены дочерних коллекций Unmodified
переводятся в состояние . Чтобы обновить элементы дочерней коллекции, необходимо явно вызвать Attach
и указать эту сущность.