Table<TEntity>.Attach 方法

定义

将实体附加到 .DataContext

重载

名称 说明
Attach(TEntity)

当乐观并发检查需要原始值时,将断开连接或“分离”实体附加到新 DataContext 实体。

Attach(TEntity, Boolean)

将实体附加到处于已修改状态或未修改状态的 DataContext 实体。

Attach(TEntity, TEntity)

通过同时指定实体及其原始状态,将实体附加到 DataContext 已修改状态或未修改状态中的实体。

注解

Attach 方法与在一个 DataContext中创建的实体配合使用,序列化为客户端,然后反序列化(目的是执行更新或删除操作)。 有关详细信息,请参阅 N 层应用程序中的数据检索和 CUD 操作(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

调用 Attach 附加 Employee 员工、主节点和子级,因为 Employee 与主节点和子级都有关系。 必须显式调用 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 并指定该实体。

有关详细信息,请参阅 N 层应用程序中的数据检索和 CUD 操作(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 并指定该实体。

适用于