Entity Framework: ObjectSet und seine (generische) Varianz

Ich benutze: EntityFramework + POCO

Hier ist das Ding

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

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

public class DerivedType : BaseType
{
}

Das Problem

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);
    }
}

WennT istBaseType all dies funktioniert perfekt, aber: Das Problem ist, dass in EntityFramework, wenn eine Klasse eine andere erbt, sie das @ gemeinsam nutzeObjectSet und daher, wennT istDerivedType dann ist dieGetTheObjectSet kehrt zurückObjectSet<BaseType>, das nicht in @ umgewandelt werden kaObjectSet<DerivedType>.

Gibt es eine Möglichkeit, dieses Ding tatsächlich zu besetzen oder das @ irgendwie anders auszuführeSingleOrDefault? Können diese Dinge mit dem @ besetzt werdeIObjectSet<> undIBaseType?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage