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  

调用 AttachEmployee 会附加员工、主节点和子级,因为 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,序列化为客户端,然后反序列化回以执行更新或删除操作。 由于 new 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 并指定该实体。

适用于