Я только начинаю играть с ядром EF (с использованием NPGSQL) и замечаю странное поведение по загрузке свойств навигации без явного использования «include». В качестве примера я вижу:Entity Framework Основные свойства навигационной навигации чрезмерно загружаются
Objecta
ObjectA-> Список ObjectB | ObjectA-> Список ObjectC
ObjectB-> Список ObjectD
Все навигационные свойства установлены, и есть элементы каждого типа в базе данных.
Я запускаю запрос на ObjectA без каких-либо включений, поэтому свойства nav должны быть пустыми. Это не так; в зависимости от запроса, иногда один из них будет заполнен без явного включения (не оба, просто ObjectB или ObjectC). Если я включу явное включение, они оба появятся, как и ожидалось. Это раздражает, но не очень плохая проблема, которую я вижу.
Скажем, я запрашиваю объект ObjectC. Если у меня установлены все свойства nav, он загружает ObjectA, как и ожидалось, но теперь ObjectA также имеет все свои навигационные свойства, загруженные; а не только то, что относится к ObjectC. Все дети ObjectA (и их дети) также возвращаются. Это приводит к появлению сотен предметов, которые не имеют абсолютно никакого отношения к тому, что было запрошено.
Это код-первый (я создаю базу данных вручную, так как строительные леса в NPGSQL кажутся очень глючными). Вот пример того, как родитель отношения моделируется для одного из моих сущностей:
entity
.HasOne<User>(c => c.User)
.WithMany(p => p.Addresses)
.HasForeignKey(c => c.UserId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName<User, Address>("fk_addresses_user");
Если я опрашивать один адрес, родительский пользователя вытягивается назад, но при том, что каждый другой адрес привязан к пользователю, а также (это одноуровневая ассоциация, но если у Адреса были дети, все они тоже были бы отброшены).
Я сейчас не в порядке; единственное, что я смог сделать, это удалить все дочерние навигационные свойства из моей модели.
Являются ли свойства навигации определенными как «виртуальные»? –
IIRC, Entity Framework имеет возможность принудительно выполнять ленивую загрузку (или отключить загрузку) –
Можете ли вы опубликовать некоторый фактический код, чтобы мы могли видеть, что вы делаете? Пожалуйста, разместите свою модель. Кроме того, можете ли вы, пожалуйста, открывать проблемы для каких-либо ошибок, которые у вас есть? На данный момент я не знаю ничего серьезного. –