Entity Framework: ObjectSet y su varianza (genérica)
Yo uso: EntityFramework + POCO
Aquí está la cosa:
public interface IBaseType
{
int Id { get; set; }
}
public class BaseType : IBaseType
{
public virtual int Id { get; set; }
}
public class DerivedType : BaseType
{
}
El 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);
}
}
SiT
esBaseType
todo esto funciona perfectamente, pero: el problema es que en EntityFramework cuando una clase hereda otra comparten laObjectSet
y, por lo tanto, siT
esDerivedType
entonces laGetTheObjectSet
devolucionesObjectSet<BaseType>
, que no se puede enviar aObjectSet<DerivedType>
.
¿Hay alguna manera de lanzar esto realmente o de alguna otra manera ejecutar elSingleOrDefault
? ¿Se pueden lanzar esas cosas usando elIObjectSet<>
yIBaseType
?