Same - I hate how the dataloader documentation is so centered around the idea that your dataloader just reaches out directly into your Ecto layer. I always ended up building my own KV implementation of dataloader. Maybe I was dumb, and maybe I was basically just writing boiler plate, but at least I could reason about my GraphQL API and my DB/Repo/Schema separately and just have one use the other.
Maybe it's actually a great library, but it feels like I'm giving up control of my queries and letting it run with them.
I prefer to use the batch function and manually resolve the query on my own. It's a little more work but it's pretty easy in the end. And fully controlled.