Use EntitySetController if you want to create an OData endpoint. Use ApiController if you want to return generic JSON or XML, or some other format (e.g., using a custom formatter).
In Web API, EF and OData are not necessarily connected. You can write an OData endpoint that does not use EF. A lot of the Web API tutorials use EF, because EF code-first is relatively easy to show in a tutorial. :-)