“实体跟踪的实体”在实体框架中的含义是什么

时间:2011-06-22 22:03:08

标签: entity-framework entity-framework-4

我正在阅读E.F.团队博客的这个系列http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction-and-model.aspx

在很多地方,我看到这个术语“按上下文跟踪的实体”,特别是在这部分http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx(第4部分)

我的问题是

  1. “按上下文跟踪的实体”是什么意思??

  2. 每个请求都使用相同的上下文,或者为每个请求创建新的上下文(我使用E.F.代表Asp.Net MVC APP)

  3. 跟踪每个实体(已加载)必须在服务器上添加一些内存开销,是吗?

1 个答案:

答案 0 :(得分:4)

“由上下文跟踪的实体”意味着上下文知道实体,它知道实体的状态以及对实体所做的更改。上下文只能用于跟踪的实体。如果调用保存更改,则仅跟踪实体上的更改将持久保存到数据库。跟踪和附加可以被视为同义词。

在EF中,我们通常谈论附加实体和分离实体。附加实体由上下文跟踪。如果从数据库加载实体(除非您手动让EF不跟踪实体)或者调用AttachAdd(DbContext API)/ AddObject(ObjectContext API)为实体。您可以通过调用Detach(ObjectContext API)或将状态设置为Detached(DbContext API)来强制实体从上下文中分离。如果您只是在代码中创建实体,那么在您为其调用Attach之前,它将被视为已分离。

New context is always created for each request - Web应用程序与分离的实体一起工作很多。这也将解决内存问题。如果您将要存储的所有实体分离到某种状态(如会话),并且如果在每个请求中正确处理上下文,则将释放内存。