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
在 上Employee
调用 Attach
会附加员工、master 和 child,因为 Employee
与 master 和 child 都有关系。 必须显式调用 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
并指定该实体。