Trabajando alrededor de la falta de inferencia de tipo genérico parcial con restricciones

Tengo una interfaz (que es utilizada por los repositorios) que tiene este miembro:

T FindById<T, TId>(TId id)
    where T : class, IEntity<TId>
    where TId : IEquatable<TId>;

Esto permite al llamante especificar un tipo de entidad (T) y el tipo de esId campoTId). El implementador de esta interfaz encontraría las entidades de tipoT y usar elid parámetro para filtrarlos según su id (que se define enIEntity<TId>).

Actualmente lo estoy llamando así:

int id = 123;
var myApproval = PartsDC.FindById<Approval, int>(id);

Idealmente me gustaría hacer esto:

int id = 123;
var myApproval = PartsDC.FindById<Approval>(id);

He leído las respuestas a esta pregunta:

¿Inferencia de tipo genérico parcial posible en C #?

Entiendo que no puedo obtener la sintaxis que quiero, pero puedo acercarme. Aunque no puedo configurarlo bien en mi caso debido a mis restricciones de parámetros genéricos.

Esto es lo que tengo hasta ahora:

public class FindIdWrapper<T> where T : class
{
    public readonly IDataContext InvokeOn;

    public FindIdWrapper(IDataContext invokeOn)
    {
        InvokeOn = invokeOn;
    }

    T ById<TId>(TId id) where TId : IEquatable<TId>
    {
        return InvokeOn.FindById<T, TId>(id);
    }
}

public static class DataContextExtensions
{
    public static FindIdWrapper<T> Find<T>(this IDataContext dataContext) where T : class, IEntity
    {
        return new FindIdWrapper<T>(dataContext);
    }
}

El error de compilación que obtengo es:

The type 'T' cannot be used as type parameter 'T' in the generic type or method 'PartsLegislation.Repository.IDataContext.FindById<T,TId>(TId)'. There is no implicit reference conversion from 'T' to 'PartsLegislation.Repository.IEntity<TId>'.

Entiendo lo que está diciendo porque elT en mi clase contenedora solo está restringido para ser un tipo de referencia, pero laFindById la función quiere que seaIEntity<TId>, pero no puedo hacer eso como elTId está en el método (de lo contrario estoy de vuelta en una plaza).

¿Cómo puedo solucionar este problema (o no puedo)?

Respuestas a la pregunta(1)

Su respuesta a la pregunta