Table<TEntity>.AttachAll 方法

定义

以修改或未修改状态将集合的所有实体附加到 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 并指定该实体。

适用于