2011-07-31 101 views
1

在書中「Entity Framework 4 in Action」,在第16.1.3和再16.2.4,據說POCO/PROXY禁用延遲加載

如果你有一個代理實例,記得前禁用延遲加載 序列化,否則你最終會發送不需要的數據給客戶端。

但是,作者從來沒有說過如何禁用延遲加載。在我自己的搜索中,我聽說過ContextOptions.LazyLoadingEnabled。這是「完成」的方式嗎?是否有多種方式(除了禁用代理生成)?

one article讀到,LazyLoadingEnabled標誌僅適用於EntityObject的實體,而不是POCO的entites:

打開延遲加載過,現在可以讓你的類被正確序列化 。請注意,這是如果您使用標準實體 框架類。如果你使用POCO,你將不得不做 稍有不同。

使用POCO,實體框架將創建默認的代理類 ,允許延遲加載等工作與POCO一起使用。這個代理 基本上創建了一個代理對象,它是位於上下文和POCO對象之間的完整實體框架 對象。當使用 POCO與WCF(或任何序列化)時,只需關閉延遲加載 不會削減它。您必須關閉代理創建,以確保 您的課程將正確序列化

我懷疑上述評論是錯誤的。

回答

1

是的,ContextOptions.LazyLoadingEnabled是「方式」。序列化問題相關,但不同。代理具有不同的運行時類型。這可能會產生序列化。與延遲加載唯一的關係是純粹的(非代理)POCOs不會執行延遲加載。