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
?