Comment forcer Entity Framework à toujours obtenir des données mises à jour à partir de la firebase database?

J’utilise la bibliothèque EntityFramework.Extended pour effectuer des mises à jour par lots. Le seul problème est que EF ne garde pas trace des mises à jour par lots effectuées par la bibliothèque. Donc, lorsque DbContext nouveau DbContext les entités mises à jour ne sont pas DbContext .

J’ai trouvé que l’utilisation de la méthode AsNoTracking() lors de l’interrogation désactive le suivi et obtient de nouvelles données de la firebase database. Cependant, comme EF ne garde pas trace des entités interrogées avec AsNoTracking() , je ne suis pas en mesure d’effectuer une mise à jour sur les données interrogées.

Existe-t-il un moyen de forcer EF à obtenir les dernières données lors du suivi des modifications?

Veuillez essayer ceci pour rafraîchir une seule entité:

 Context.Entry(entity).Reload() 

Modifier: pour obtenir de nouvelles données pour un ensemble d’entités, essayez de DbContext instance de DbContext après chaque requête.

Je suis tombé sur cette question en cherchant une solution à un problème que je rencontrais là où les propriétés de navigation ne se remplissaient pas après la mise à jour de l’entité. Chaque fois que j’essayais de recharger l’entité à partir de la firebase database, elle saisissait plutôt l’entrée du magasin local, ce qui ne remplissait pas les propriétés de navigation via un chargement différé. Au lieu de détruire le contexte et d’en recréer un, j’ai trouvé que cela me permettait d’obtenir de nouvelles données avec les mandataires:

 _db.Entry(entity).State = EntityState.Detached; 

La logique sous-jacente était la suivante: ma mise à jour contenait l’entité afin de suivre les modifications. Cela l’ajoute au magasin local. Par la suite, toute tentative de récupération de l’entité avec des proxies fonctionnels entraînerait la récupération de l’entité locale au lieu de sortir vers la firebase database et de renvoyer une nouvelle entité à extension proxy. J’ai essayé l’option de rechargement ci-dessus, qui rafraîchit l’object à partir de la firebase database, mais cela ne vous donne pas l’object proxy avec chargement différé. J’ai essayé de faire un Find(id), Where(t => t.Id = id), First(t => t.Id = id) . Finalement, j’ai vérifié les états disponibles qui ont été fournis et j’ai vu qu’il y avait un état “Détaché”. Eureka! J’espère que cela aide quelqu’un.

Si le code est exécuté sur le même contexte, les entités mises à jour ne seront pas générées. Il appenda uniquement les nouvelles entités créées dans la firebase database entre les exécutions. Le rechargement de force EF peut se faire comme ceci:

 ObjectQuery _query = Entity.MyEntity; _query.MergeOption = MergeOption.OverwriteChanges; var myEntity = _query.Where(x => x.Id > 0).ToList(); 

J’ai déclaré la variable d’entité, sans affectation, comme faisant partie de la classe. Cela m’a permis de disposer d’une instance sans perdre la variable pour référence par d’autres méthodes. Je suis juste tombé sur cela, donc il n’a pas beaucoup de temps d’exécution sous sa ceinture, mais jusqu’à présent, il semble bien fonctionner.

 public partial class frmMyForm { private My_Entities entity; public frmMyForm() { InitializeComponent(); } private void SomeControl_Click(object sender, EventArgs e) { db.SaveChanges(); db.Dispose(); entity = new My_Entities(); //more code using entity ... } 

Pour moi … j’accède à mon DbContext comme ceci:

 _viewModel.Repo.Context 

Pour forcer EF à bash la firebase database, je fais ceci:

 _viewModel.Repo.Context = new NewDispatchContext(); 

Remplacement du DbContext actuel par une nouvelle instance. La prochaine fois que j’utiliserai mes services de données, ils obtiendront les données de la firebase database.