J'ai une requête LINQ qui retourne un seul objet - le contexte est un ObjectContext pas DbContextEntity Framework objet Contexte Actualisez
var q = from c in context.x //this has various includes but this just an example
where c.Id == xId
select c;
X x = q.FirstOrDefault();
Je joins alors une collection à cela en utilisant les éléments suivants
ObjectQuery<Z> y = x.Y.CreateSourceQuery().Include("1").Include("2");
x.Y.Attach(y);
Cependant, il y a un problème lorsque j'essaie d'actualiser l'objet chargé et si des éléments attachés dans la requête source ont été supprimés, ils ne sont pas modifiés lors de l'actualisation. , mais je dois garder le c ontext ouvert car j'ai besoin de sauvegarder dans la base de données.
J'ai essayé de rafraîchir en utilisant les éléments suivants:
context.Refresh(RefreshMode.StoreWins, y);
ou le déclenchement d'un déclenchement d'un rafraîchissement en définissant l'état d'entité modifiée:
context.ObjectStateManager.ChangeObjectState(pb, EntityState.Modified);
Je comprends que dans un contexte de DB, vous pouvez rafraîchir l'entité en forçant un rafraîchissement de base de données, ma question serait est-il possible de forcer l'actualisation en utilisant ObjectContext. En utilisant DbContext, nous avons pu obtenir les résultats souhaités en rafraîchissant tout mais comme vous pouvez l'imaginer, c'était très lent.
var refreshableObjects = context.ChangeTracker.Entries().Select(e => e.Entity).ToList();
foreach (var obj in refreshableObjects)
{
((IObjectContextAdapter)context).ObjectContext.ObjectStateManager.GetRelationshipManager(obj).GetAllRelatedEnds().Where(r => r.IsLoaded).ToList().ForEach(c => c.Load());
}
Avez-vous essayé? 'context.Entry (y) .Reload();' – lokusking
objectcontext n'a pas de méthode d'entrée http://stackoverflow.com/questions/11032683/objectcontext-does-not-contain-a-definition-for-entry-and -no-extension-metho – Chris
Vous avez raison. Je regarde dans quelques heures quand j'ai accès à mon EF-Project – lokusking