Lo scenario è semplice:
Il codice per collegare i dati da DB a listbox è il seguente:
dbContext = new MyDBContext();
listBox1.DataSource = dbContext.Experiments.Select(a => a.Name + "," + a.ModificationDate.Second).ToList();
Ho il tasto per aggiungere una riga alla tabella DB con il codice:
dbContext.Experiments.Add(new Models.Experiment()
{
CreationDate = DateTime.Now,
ModificationDate = DateTime.Now,
Description = "Test" + DateTime.Now.Second,
Name = "test" + DateTime.Now.Second
});
dbContext.SaveChanges();
Ora vorrei aggiornare automaticamente le posizioni nella mia lista. Qual è l'approccio migliore per farlo? So che posso riscrivere il codice dal punto 3, ma mi piacerebbe che fosse completamente bidirezionale e aggiornato automaticamente
Penso che "associazione dati" sia una parola chiave qui. Generalmente in WinForms l'offerta bidirezionale viene fornita da classi come BindingList <T> o BindingSource . La domanda è come usarli insieme a EF. Penso che un metodo di estensione ToBindingList possa essere utile qui. Tuttavia, non ho molta esperienza con l'utilizzo. Vi suggerisco di consultare il seguente articolo: Entity Framework Databinding with WinForms . Inoltre, se cerchi ToBindingList EntityFramework su StackOverflow troverai molte domande correlate.
AGGIORNARE
Ho fatto un piccolo test e vedo un potenziale problema. La sincronizzazione automatica tra un controllo e EF funzionerà se si utilizza lo stesso contesto di dati (la stessa istanza della classe DbContext). Significa che un contesto può avere un lungo ciclo di vita che non è raccomandato.