0

在使用EF5 DbContext後更改配置後出現問題。我正在使用POCO T4模板。下面是這種情況:忽略EF5 DBContext配置

  • 我查詢了一套在我的背景,並得到與他們的關係動態代理對象
  • 我修改上下文的配置,以禁用動態代理和延遲加載這樣的:

    context.Configuration.ProxyCreationEnabled = false; 
    context.Configuration.LazyLoadingEnabled = false; 
    
  • 我再一組再次查詢並獲得相同的一種代理和關係的結果。

在上下文初始化之後需要做什麼才能將配置考慮在內?可能嗎?

在此先感謝!

回答

1

如果您查詢一組,禁用代理的創建,並再次查詢同一組你有很大的機會獲得代理實體反正。原因是上下文內部使用的身份映射。每個實體只能被上下文跟蹤一次。因此,如果您在啓用代理創建的情況下查詢集合,則EF將爲從數據庫加載的每個唯一記錄創建具有動態代理的實體實例。當禁用代理創建後再次查詢該集合時,EF將重新使用所有已創建的實體(及其代理),併爲沒有動態代理的只創建尚未加載的記錄創建新實體。

如果你想避免這些代理你必須:

  • 第一查詢
  • 使用第二查詢新的上下文之前關閉代理創建

你也可以嘗試使用AsNoTracking()但我懷疑它不起作用。

+0

而且......它的工作原理!我的問題是,在我的DDD實現中,使用依賴注入和不同的抽象層,我不能輕鬆更新上下文,也不能關閉整個操作的代理(因爲它也會禁用延遲加載)。但使用AsNoTracking()和禁用代理創建,我的POCO類型被保留。實際上,AsNoTracking()將動態代理轉換爲初始POCO類型。但要小心,它似乎本身只與Json序列化,而不是XML。 – Paul 2013-02-19 09:58:07