EF4 POCO с отложенной загрузкой.Почему исправление повторяет всю базу данных? - PullRequest
3 голосов
/ 30 марта 2011

Это действительно ожидаемое поведение? Я использую стандартные шаблоны P4O T4 (но Repository и UnitOfWork генерируются с помощью http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-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. Если на этот relm указывает 100 000 других HORDERS (которые некоторые из них), то исправление, кажется, обходит их, занимая вечность (или до тех пор, пока не закончится память - в зависимости от того, что произойдет раньше)

Если я отключу ленивую загрузку, этого не произойдет, но действительно ли я должен ожидать, что исправление отменит все отношения в моей базе данных? Или что-то еще пошло не так? Если так, то что?

1 Ответ

1 голос
/ 30 марта 2011

Это хорошо известная проблема использования объектов POCO, сгенерированных шаблоном T4, с отложенной загрузкой.Вы не сможете избежать этого, если просто не измените свой RELM, чтобы он не содержал свойство навигации для всех включенных HORDERS.Другие возможности - модифицировать T4, чтобы не использовать коллекции исправлений или писать POCO самостоятельно.

Только вывод - это не неправильное поведение EF.Это неожиданное поведение кода, сгенерированного шаблоном T4.

...