Ho un'app WPF che ha una griglia con un elenco di dati che ho caricato con EF. Alcune altre finestre possono apportare modifiche agli stessi dati caricati sulla griglia ma utilizzando un'istanza di dbcontext diversa. Come posso vedere i dati modificati sulla griglia? So che posso aggiornare una singola entità con ctx.Entry<MyEntity>(instance).Reload();
- ma voglio vedere tutte le modifiche e non importa quello che faccio, vedo solo i vecchi valori. Non riesco a utilizzare AsNoTracking
né creare una nuova istanza DbContext
in questo caso.Carica le modifiche apportate in un altro DbContext
risposta
Per me sembra un caso molto semplice e non riesco a capire perché EF non solo aggiorni i valori delle entità.
EF ha anche questo meccanismo ma non è esposto sull'API DbContext. Devi tornare a ObjectContext. Se si desidera solo ricaricare insieme di entità si chiamerà:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.Refresh(RefreshMode.StoreWins, listOfEntitiesToReload);
RefreshMode.StoreWins
provoca tutte le modifiche in sospeso per essere sovrascritti dai valori ricaricati. Puoi anche utilizzare RefreshMode.ClientWins
che manterrà le tue modifiche e le unirà con i dati ricaricati. Il problema con questo approccio è che ricarica solo le entità che già possiedi. Non otterrai nuove entità.
Se si desidera ottenere nuove entità così è necessario eseguire una query e si deve dire EF che si desidera ricaricare valori:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objectSet = objectContext.CreateObjectSet<MyEntity>();
objectSet.MergeOption = MergeOption.OverwriteChanges;
var result = objectSet.Where(...).ToList();
Anche in questo caso MergeOption.OverwriteChanges
sovrascrive tutte le modifiche in sospeso, ma è possibile utilizzare MergeOption.PreserveChanges
per unire ricaricato valori ai valori modificati.
Penso che ci possano essere ancora alcuni problemi con valori di aggiornamento con alcune relazioni e forse anche entità che sono state cancellate nel database.
Questo è esattamente ciò di cui ho bisogno, grazie, la mia fiducia su EF è stata ripristinata :) – user1526627
@ ladislav-mrnka Una domanda, l'ultimo passaggio è davvero necessario? Se ti ho capito bene, EF riconoscerà solo le modifiche ai record che italready ha caricato e le unisce al primo modo. Quindi, se dovessi aggiungere manualmente una nuova riga a una tabella, non verrebbe aggiornata in dbcontext utilizzando il primo modo? Ho appena provato questo e non ho visto la necessità del secondo modo. Forse il comportamento è cambiato o ti ho completamente frainteso? :) – DrCopyPaste
- 1. DbContext di Entity Framework salva le modifiche se non sono state apportate modifiche?
- 2. Come annullare le modifiche apportate tramite Databinding?
- 3. Come scartare tutte le modifiche apportate a un ramo?
- 4. registerOnSharedPreferenceChangeListener non funziona per le modifiche apportate in diversi processi
- 5. annullare tutte le modifiche apportate nel controller di visualizzazione figlio
- 6. Ruby on Rails: come migrare le modifiche apportate ai modelli?
- 7. Confronto tra le modifiche apportate al file corrente tramite Git
- 8. Watchify non rileva sempre le modifiche apportate ai file javascript
- 9. Come ripristinare le modifiche apportate a un oggetto in silverlight 3 con un binding TwoWay
- 10. Ordina array e riflette le modifiche in un altro array
- 11. C# Problema: come si salvano le modifiche apportate in un DataGridView al DataTable utilizzato?
- 12. Ottenere tutte le modifiche apportate a un oggetto in Entity Framework
- 13. Spostare le modifiche apportate nel ramo di sviluppo in un nuovo ramo di funzionalità git-flow?
- 14. Come salvare le modifiche apportate a un file HTML utilizzando BeautifulSoup in Python?
- 15. Ripristina le modifiche a un file in un commit
- 16. Impedire che vengano apportate modifiche locali in Git
- 17. Flushing delle modifiche apportate a VBProject.VBComponents in Excel tramite VBA
- 18. carica jQuery in un altro file js
- 19. Creazione di un ramo git dopo che le modifiche sono state apportate al master
- 20. Il salvataggio delle modifiche non è consentito. Le modifiche apportate richiedono che le seguenti tabelle vengano eliminate e ricreate
- 21. Ascoltare le modifiche in Redis?
- 22. Perché le modifiche apportate a una struttura tramite un metodo non vengono mantenute?
- 23. Usare Delphi per tenere traccia delle modifiche apportate alla cartella?
- 24. Aggiornamento del database con modifiche apportate a DataTable ... confusione
- 25. Git: come mantenere aggiornato il ramo di funzionalità locale con le modifiche apportate in dev?
- 26. modifiche apportate ai file di monitoraggio dei volumi Docker
- 27. Visibilità delle modifiche apportate a Lucene. Best practice
- 28. Rspec/FactoryGirl: le modifiche apportate in fabbrica non salvano nel database di test?
- 29. Determinare le combinazioni di modifica apportate per un dato importo
- 30. Come rimuovere le modifiche in un file in hg
Perché non è possibile utilizzare 'AsNoTracking'? –
Perché l'utente può apportare modifiche direttamente alla griglia e salvarlo. – user1526627
Ma in tal caso è possibile aver modificato i dati non salvati e il ricaricamento può far sì che questi dati siano diversi? Come vuoi risolvere questo problema? –