Объяснение простое - существует несоответствие между вашей моделью сущности и базой данных.
Когда FK обнуляется, как ваш OfficeId
, связь необязательна, EF Core ожидает, что столбец может быть нулевым, и использует левое внешнее объединение при извлечении связанных данных (запрошено через Include
).
Но в какой-то момент вы, кажется, добавили атрибут [Required]
к свойству FK:
[Required(ErrorMessage = "Office is Required.")] // <-- the problem
[Display(Name = "Offices:")]
[Column("audit_office_id")]
public short? OfficeID { get; set; }
// [ForeignKey("OfficeID")]
public Office Office { get; set; }
Обратите внимание, что атрибут [Required
] и IsRequired()
свободный API имеют приоритет над типом данных (конечно, вы не можете сделать необнуляемый тип обнуляемым, но возможен другой способ). В результате EF считает OfficeID
FK обязательным (т. Е. Столбец без значения NULL в базе данных) и выполняет внутреннее объединение , что, конечно, фильтрует результат в случае, если запись содержит нулевое значение FK.
Решение состоит в том, чтобы удалить этот атрибут. И вообще, всегда синхронизируйте модель и базу данных. Каждый раз, когда вы что-то меняете в модели, добавляете новую миграцию Если он пуст, удалите его, в противном случае посмотрите, какие изменения в базе данных предполагаются EF на основе метаданных / конфигурации вашей модели.