Estrutura de entidades: ObjectSet e sua variação (genérica)

Eu uso: EntityFramework + POCO

É o seguinte:

public interface IBaseType
{
    int Id { get; set; }
}

public class BaseType : IBaseType
{
    public virtual int Id { get; set; }
}

public class DerivedType : BaseType
{
}

O problema:

public class EntityFetcher<T> where T : BaseType
{
    public object GetById(int id)
    {
        ObjectSet<T> objectSet = (ObjectSet<T>)GetTheObjectSet(typeof(T)); 

        return objectSet.SingleOrDefault((o) => o.Id == id);
    }
}

E seT éBaseType tudo funciona perfeitamente, mas: O problema é que, no EntityFramework, quando uma classe herda outra, elas compartilham oObjectSet e, portanto, seT éDerivedType então oGetTheObjectSet retornaObjectSet<BaseType>, que não pode ser convertido paraObjectSet<DerivedType>.

Existe uma maneira de realmente lançar essa coisa ou de alguma forma executar oSingleOrDefault? Essas coisas podem ser lançadas usando oIObjectSet<> eIBaseType?

questionAnswers(3)

yourAnswerToTheQuestion