2011-06-22 69 views
1

我讀這個EF團隊博客的這一系列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(第四部分)

我的問題是

  1. 什麼是 「實體扯到上下文」 的意思?

  2. 是否相同的情況下被用於爲每個請求或新的上下文爲每個請求(我使用EF爲Asp.Net MVC APP)

  3. 跟蹤每一個實體(加載)創建必須加入一些內存 - 服務器上的開銷,是嗎?

回答

2

「上下文跟蹤的實體」表示上下文知道實體,它知道實體的狀態以及對實體所做的更改。上下文只能跟蹤實體。如果您調用保存更改,則只有被跟蹤實體上的更改纔會被保存到數據庫中。跟蹤和附加可以被視爲同義詞。

在EF中,我們通常會談論附加的實體和分離的實體。上下文跟蹤附加實體。如果您從數據庫加載實體(除非您手動使EF不跟蹤該實體),或者如果您爲該實體調用AttachAdd(DbContext API)/ AddObject(ObjectContext API),則實體將變爲掛接。您可以通過調用Detach(ObjectContext API)或將狀態設置爲Detached(DbContext API)來強制實體脫離上下文。如果您只是在您的代碼中創建實體作爲任何其他類,那麼在您爲其調用Attach之前,它將被視爲分離。

New context is always created for each request - Web應用程序與分離的實體有很大關係。這也將解決內存問題。如果您將某個狀態下想要存儲的所有實體(如會話)分開,並且如果在每個請求中正確處理上下文,則將釋放內存。

+2

我如何知道我的對象是否被跟蹤(附加)? – user1534664