2016-08-24 8 views
0

Я только начинаю играть с ядром 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"); 

Если я опрашивать один адрес, родительский пользователя вытягивается назад, но при том, что каждый другой адрес привязан к пользователю, а также (это одноуровневая ассоциация, но если у Адреса были дети, все они тоже были бы отброшены).

Я сейчас не в порядке; единственное, что я смог сделать, это удалить все дочерние навигационные свойства из моей модели.

+0

Являются ли свойства навигации определенными как «виртуальные»? –

+0

IIRC, Entity Framework имеет возможность принудительно выполнять ленивую загрузку (или отключить загрузку) –

+0

Можете ли вы опубликовать некоторый фактический код, чтобы мы могли видеть, что вы делаете? Пожалуйста, разместите свою модель. Кроме того, можете ли вы, пожалуйста, открывать проблемы для каких-либо ошибок, которые у вас есть? На данный момент я не знаю ничего серьезного. –

ответ

0

Я думаю: «Я вижу, что он делает сейчас. Это авто, включая другие свойства, которые уже отслеживаются локально (что имеет смысл, я думаю). Мое тестирование я читал/создавал сразу несколько элементов, и я был смущен некоторыми вещами, заполненными без явного включения. После большего тестирования он ведет себя так, как я ожидаю, когда у меня есть более простые запросы, не обращающиеся к другим объектам в том же контексте.

 Смежные вопросы

  • Нет связанных вопросов^_^