Estoy escribiendo un repositorio genérico para marco de la entidad y estoy confundido en cuanto a cuál es la diferencia entre estas llamadas son:Diferencias entre .CreateObjectSet <T>,. Set <T> y .CreateQuery <T>?
ObjectContext.CreateObjectSet<T>
ObjectContext.CreateQuery<T>
DbContext.Set<T>
Quiero un repositorio genérico que ambos soportes contexto generado a partir de archivos .edmx así como código de primeros DbContext, así que tengo esto:
public abstract class EntityRepository<TClass>
where TClass : class, new()
{
//private readonly TContext _context;
private readonly ObjectSet<TClass> _objectSet;
protected EntityRepository(IObjectContextAdapter context)
{
_objectSet = context.ObjectContext.CreateObjectSet<TClass>();
}
protected EntityRepository(ObjectContext context)
{
_objectSet = context.CreateObjectSet<TClass>();
}
public ObjectSet<TClass> Query()
{
return _objectSet;
}
}
En los ejemplos que he visto en línea que he visto todo 3 utilizadas, lo que es las diferencias reales entre ellos? ¿Es un mejor rendimiento sabio? Sé que puedes escribir consultas LINQ contra los contextos usando los 3 métodos.
¿Realmente no hay diferencias de rendimiento al ejecutar consultas en la base de datos para cada uno de estos? En mi caso, dado que mi Repositorio no está almacenando el contexto real, ¿diría que fui por el camino correcto de elegir ObjectSet para poder realizar todas las operaciones CRUD con él? – SventoryMang
Fundamentalmente y ObjectSet: ObjectQuery . Si crea su consulta usando uno u otro no afecta la ejecución de la consulta. Hay una sobrecarga mínima en la llamada a CreateObjectSet en comparación con CreateQuery (hacemos algunas búsquedas de metadatos) pero me sorprendería si esta sobrecarga tuviera algún impacto observable en el mundo real. La implementación del conjunto en la API DbContext es realmente una capa delgada sobre los otros métodos. Tampoco debería tener un impacto significativo, y DbContext en su conjunto es mucho más simple y fácil de usar API. –
divega