Ваш метод исправления выглядит примерно так:
private void FixupAddressStatusLookup(AddressStatusLookup previousValue)
{
if (previousValue != null && previousValue.Persons.Contains(this))
{
previousValue.Persons.Remove(this);
}
// more ...
}
Он вызывается в установщике свойства навигации AddressStatusLookup
в вашем классе Person
.
Теперь представьте, что у вас включена отложенная загрузка , и вы присваиваете новую AddressStatusLookup
сущности Person
(вызывается установщик и, следовательно, метод исправления): previousValue.Persons.Something...
вызывает отложенную загрузку для выполнить запрос к базе данных, которая загружает всех людей, у которых значение AddressStatusLookup
равно previousValue
- то есть с вашими миллионами людей и всего 50 стати, вероятно, список из тысяч или сотен тысяч записей о людях, которые были загружены до Contains
оправдан вообще.
Я не знаю, как эти автоматически сгенерированные методы исправления могут быть совместимы с отложенной загрузкой, не вызывая таких проблем.
Для решения проблемы вы можете попробовать:
- Удалите коллекцию
Person
из своего класса AddressStatusLookup
(как вы уже пытались с успехом). Его полезность в любом случае сомнительна.
- Или: не работать с отложенной загрузкой
- Или: Удалить методы fixup из сгенерированных классов. (Возможно, можно настроить шаблоны T4 и создать собственный шаблон для подавления генерации этих методов, но я не уверен.)
(Если у вас не включена отложенная загрузка, этот ответ, вероятно, совершенно бесполезен.)