А зачем это чинить на уровне EF, когда чинить надо на уровне сериализации?
Почему ты пытаешься возвращать модели из БД в контроллере, вместо маппинга?
(это на будущее - так делать не стоит, а то так по неосторожности ещё и конфиденциальную информацию на фронт выдашь)
Ещё вариант - можно в сериализаторе включить обработку цикличных ссылок через метод Configure JsonOptions:
builder.Services.Configure<JsonOptions>(options =>
{
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
});
То поведение, которое вы наблюдаете у себя - это нормально. (это в общем-то именно то, ради чего ORM и существует)
Когда ты делаешь Include - у тебя связи грузятся и из A в B и из B в A, но не в C.
ThenInclude нужен только чтобы прогрузить A -> B -> C