Связанные свойства ссылок / коллекций должны загружаться либо явно, либо явно. Как правило, вы хотите загружать, используя Include
:
var clients = await _context.Clients.Include(x => x.Configurations).ToListAsync();
В качестве альтернативы, вы можете выполнять отложенную загрузку, но это, как правило, плохая идея, так как это может привести к проблемам с N + 1 запросом (т. Е. Вы выполняете один запрос, а затем отдельный дополнительный запрос для каждого элемента при выполнении итерации, что очевидно крайне неэффективно). Независимо от того, ленивая загрузка требует двух вещей:
Свойство reference / collection должно иметь ключевое слово virtual
. EF добавляет функциональность отложенной загрузки, создавая динамический прокси вашего класса сущностей и переопределяя метод получения свойств. Переопределение, конечно, может быть сделано только на виртуальных машинах.
Вы должны явно добавить службы отложенной загрузки:
services.AddDbContext<MyContext>(o => o.UseLazyLoadingProxies()
.UseSqlServer(connectionString));
Это работает, когда вы запрашиваете конфигурации, потому что EF имеет объект-fixup. Другими словами, он автоматически заполнит связанные свойства ссылки / коллекции, если он ранее уже извлек эти объекты и поместил их в свой кэш объектов. В противном случае, и если вы не загрузите отношения иначе, свойство останется нулевым.