Я думаю, это потому, что вы лениво загрузили свойства навигации.
Попробуйте изменить ваш запрос следующим образом
public async Task<NodeModel> FindByID(string pID, CancellationToken pCancellationToken)
{
pCancellationToken.ThrowIfCancellationRequested();
return await Context.Nodes.Include(m => m.Node).FirstOrDefaultAsync(m => m.ID == pID);
}
Причина, по которой вы работаете при запросе всех записей, заключается в том, что Entity Framework достаточно умен, чтобы знать, что в него уже загружен этот объект. Поскольку в этом случае вы запрашиваете полный набор данных, узлы уже загружены.