Table<TEntity>.Attach 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将实体附加到 .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 并指定该实体。