Это из-за (неправильной) конфигурации отношений.
То, как вы ее определили
[ForeignKey("PersonId, EmailId")]
в PersonEmail
делает это отношение один к одному с PersonEmail
будучи зависимым (из-за ФК) и EmailRecord
являющимся принципалом .
Если это так, то "поскольку таблица EmailRecord не содержит записи для этих конкретных элементов" просто не может произойти из-за принудительного ограничения FK. И из-за этого EF Core 3.0+ Include
генерирует правильно inner join
, который не должен фильтровать основной набор, но фактически фильтрует его из-за фактического отношения данных в базе данных.
To исправить это, вы должны отразить фактические отношения, которые, кажется, наоборот: один к одному с основным PersonEmail
и зависимым EmailRecord
.
Удалите вышеуказанный атрибут [ForeignKey]
и добавьте следующая свободная конфигурация:
modelBuilder.Entity<PersonEmail>()
.HasOne(x => x.EmailRecord)
.WithOne()
.HasForeignKey<EmailRecord>(x => new { x.PersonId, x.EmailId });
Теперь Include
будет использовать left outer join
и не будет фильтровать записи PersonEmail
.
Для получения дополнительной информации см. Отношения - Документация EF Core один на один .