EF : problème de réattachement quand le contexte a été disposé
Quand nous avions préparé notre session pour les techdays avec Michel, nous étions tombé sur le problème suivant : quand on a obtenu une entité et que le context a été disposé, il n'est plus possible de réattacher l'entité à un autre context. En fait si, il y a deux possibilités comme j'ai répondu à Julie qui s'est trouvée confrontée au même problème :
Surcharger le Dispose sur l'ObjectContext pour détacher les entités
partial class MyObjectContext
{
protected override void Dispose(bool disposing)
{
foreach (var entry in ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged))
if (entry.Entity != null)
Detach(entry.Entity);
base.Dispose(disposing);
}
}
sinon, par Reflection, on peut modifier une propriété privée (je sais c'est mal). Cependant, je m'étais demandé pourquoi cela. Jeff Derstadt nous explique pourquoi et qu'est-ce qui est prévu pour la suite.
Pourquoi : pour des raisons de perfs d'abord mais aussi parce que quand on détache un objet d'un context, on perd toutes ses relations, d'où l'intérêt de ne pas le faire.
Ce qui est prévu : pouvoir réattacher un objet quand son contexte a été disposé
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :