分离对象(实体框架)

Entity Framework 支持需要长期运行的对象上下文的方案。例如,您可能在 Windows 应用程序中找到以下方案:其中,数据对象被绑定到可视控件,并且在该控件中显示数据的同时必须持久保存该对象。在对象上下文中执行查询时,返回的对象被自动附加到该上下文。这意味着,在相同对象上下文中执行重复的查询会增加该对象上下文的内存要求。例外的情况是用 MergeOptionNoTracking 执行查询。在这种情况下,对象不会附加到对象上下文。

使用对象服务可以从对象上下文分离对象。当对象不再需要时,可以分离它们。已分离的对象不被对象上下文引用,它们的资源可以由 .NET Framework 回收。

若要分离对象,请调用 Detach 方法并传递对要分离的对象的引用,如下面的示例所示:

' Detach the first SalesOrderDetail in the collection.
context.Detach(order.SalesOrderDetail.First())
// Detach the first SalesOrderDetail in the collection.
context.Detach(order.SalesOrderDetail.First());

在分离对象时,应考虑以下注意事项:

  • Detach 只影响传递给该方法的特定对象。如果要分离的对象在对象上下文中具有相关对象,则那些相关对象不会分离。

  • 不会为已分离的对象维护关系信息。

  • 分离对象后,不会维护对象状态信息。这包括所跟踪的更改和临时键值。

  • 分离对象不影响数据存储区中的数据。

  • 在分离操作过程中不会强制执行级联删除指令和引用约束。

  • 在考虑分离对象的优点时,应该注意执行该操作所需的处理。当用户数据的范围已经更改(例如,用一组不同的数据显示新窗体)时,应该考虑创建一个新的 ObjectContext 实例,而不只是从现有 ObjectContext 分离对象。

有关更多信息,请参见如何:从对象上下文分离对象(实体框架)

另请参见

概念

附加对象(实体框架)

其他资源

管理对象上下文(实体框架)