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
?