2010-10-19 80 views
5

有人能指出POCO,自追蹤實體,POCO代理之間的區別嗎?EF4:POCO,自追蹤實體,POCO代理之間的區別

實際上,我正在使用Entity Framework 4.0和POCO(Repository Pattern),並且每當我在POCO中進行一些更改並調用ObjectContext.Savechanges時,它都會反映到數據庫中。 我的問題是,

  1. 上下文是如何持續改變數據庫,因爲它沒有被跟蹤?
  2. 上下文是否爲POCO動態生成跟蹤信息?我使用

示例代碼,

 IEFRepository<Category> catRepository = new EFRepository<Category>(); 
     Category c = catRepository.FindOne<Category>(x => x.Name == "Paper"); 

     c.Name = "Paper"; 
     catRepository.SaveChanges(System.Data.Objects.SaveOptions.None); 

回答

6

自我跟蹤實體不是波蘇斯。相反,他們非常注重持久性。甚至比EntityObject實體還要多。什麼使他們獨一無二的是即使他們沒有附加到ObjectContext也可以跟蹤變化。

正如你所說,「純」的POCO使得變更追蹤變得困難。真的,你唯一能做的就是比較對象的快照。對象上下文有一個DetectChanges方法。

使用僞POCO代理,您真正擁有的是在編譯時看起來(幾乎)像POCO的類型,並且像運行時的​​非POCO。我說「幾乎」,因爲在運行時你會得到一個實例,它是編譯時類型的一個子類型。因此,您想跟蹤更改的任何屬性都必須是非私有和虛擬的。類似的限制適用於延遲加載。您可以在ADO.NET團隊博客上閱讀this series of articles的更多信息。

+1

感謝克雷格,並回答我的問題的第二部分是ProxyCreationEnabled應該是假的。在使用POCO代理時,EF使用.NET框架中的AssemblyBuilder和TypeBuilder即時生成代理類型。 – paragy 2010-10-20 11:43:38