Table<TEntity>.AttachAll 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
以修改或未修改状态将集合的所有实体附加到 DataContext。
重载
AttachAll<TSubEntity>(IEnumerable<TSubEntity>) |
以修改或未修改状态将集合的所有实体附加到 DataContext。 |
AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean) |
以修改或未修改状态将集合的所有实体附加到 DataContext。 |
注解
如果附加为修改,则实体必须声明版本成员或不得参与更新冲突检查。
附加新实体时,任何子集合的延迟加载程序 (例如, EntitySet
将初始化关联表中) 实体的集合。 调用 时 SubmitChanges ,子集合的成员将置于状态 Unmodified
。 若要更新子集合的成员,必须显式调用 Attach
并指定该实体。
有关详细信息,请参阅 N 层应用程序中的数据检索和 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
并指定该实体。
有关详细信息,请参阅 N 层应用程序中的数据检索和 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
如果对象拥有时间戳或 RowVersion 成员,则为 true
;如果执行开放式并发检查时需要使用原始值,则为 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
在以下示例中,要附加的实体对象与其他对象具有外键关系,并且存储在缓存中,但不附加。 调用 SubmitChanges时,会 ChangeProcessor
为所有外键对象添加一个 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 已取消所有订单,而客户 B 已拥有这些订单的所有权的情况。 可以同时附加客户 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 调用 。 有关详细信息,请参阅 N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。
附加新实体时,任何子集合的延迟加载程序 (例如, EntitySet
将初始化关联表中) 实体的集合。 调用 时 SubmitChanges ,子集合的成员将置于状态 Unmodified
。 若要更新子集合的成员,必须显式调用 Attach
并指定该实体。