簡體   English   中英

帶有延遲加載的EF4 POCO。 為什么fixup迭代整個數據庫?

[英]EF4 POCO with Lazy Loading. Why does fixup iterate entire database?

這真的是預期的行為嗎? 我正在使用標准的T4 POCO模板(但是通過http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-生成了Repository和UnitOfWork template-on.aspx雖然問題似乎與POCO修正一樣)

如果我做以下事情

        var UOW = new EFUnitOfWork();
        UOW.LazyLoadingEnabled = true;
        UOW.ProxyCreationEnabled = true;
        var horderRepo = RepositoryHelper.GetHORDERRepository(UOW);
        var subrelmRepository = RepositoryHelper.GetSUBRELMRepository(UOW);
        var ho = horderRepo.Where(h=>h.RECORD_NUMBER==1).FirstOrDefault();
        var somerelm = subrelmRepository.Where(r=>r.RECORD_NUMBER==ho.REALM_KEY+1).FirstOrDefault();
        ho.SUBRELM=somerelm;
        UOW.Commit();
        return View(ho);

每次我將ho.SUBRELM更改為新的RELM時,都會調用預期的POCO修正。 如果100,000個其他HORDERS(有些人)指向那個relm,那么修正似乎走了很多,永遠(或直到內存耗盡 - 以較早者為准)

如果我關閉延遲加載,這不會發生,但我真的希望fixup能夠回溯我數據庫中的所有關系嗎? 或者還有其他問題? 如果是這樣,什么?

這是使用由T4模板生成的具有延遲加載的POCO實體的眾所周知的問題。 除非您只是將RELM修改為不包含所有包含的HORDERS的導航屬性,否則您無法避免它。 其他可能性是將T4修改為不使用fixup集合或自己編寫POCO。

只是結論 - 這不是EF的錯誤行為。 這是T4模板生成的代碼的意外行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM