octobre
2007
Imaginons le cas suivant :
J’ai une instance vers un IQueryable d’entities (exactement un System.Data.Linq.DataQuery) mais je n’ai plus de référence vers le context utilisé pour créer la requête. En parcourant les éléments de mon IQueryable<T>, je peux les modifier. Ensuite, il ma faut appeler la méthode SubmitChanges() sur le context pour que ces modifications soient persistantes en base.
Or, comme je l’ai dit, je n’ai plus de référence sur le contexte.
La seule solution que j’ai trouvé est la suivante : passé par la reflexion pour accéder à un champ privé d’une classe internal au Framework (System.Data.Linq.DataQuery) et récupérer ainsi le DataContext :
qDb.SubmitChanges();
Cela marche effectivement avec les Table
public sealed class EntitySet<TEntity> : IList, ICollection, IList<TEntity>, ICollection<TEntity>, IEnumerable<TEntity>, IEnumerable, IListSource, IEntitySet where TEntity: class
Donc en gros, ne perdez pas de référence sur un DataContext si vous gardez une référence vers une query.