I've implemented table per hierarchy Entity Data Model with an abstract Document entity and multiple derived entities (Blog, Page, ...). I have repository interface with method signatures using Document entity like this
public Document Load(Guid firmId, int prettyId)
{
// the OfType<> can be OfType<Page>, OfType<Blog>, ...
var instance = (from c in _ctx.Documents.OfType<X>() where c.firm_id == firmId && c.PrettyId == prettyId select c).FirstOrDefault();
...
}
I only have one class that implements the repository and it is using Document as the type to return from methods. I don't need custom implementations for different types that derive from Document because the implementation specifics for loading, inserting and updating are the same for all. I just need to identify/provide the type to the methods that we want to work with.
Hopefully you will understand what I mean. Please do not reply with references on how to model the TPH because I've already done that and it is modeled fine.