2016-06-01 9 views
0

Ich habe eine Kontrolle in WPF-Anwendung, dieEntitätsrahmen. Nachladen von lokalen Daten

public ObservableCollection<Entity.Account> Accounts 
{ 
    get 
    { 
     _context.Accounts.Load(); 
     return _context.Accounts.Local; 
    } 
} 

ich, dass für Daten jedes Mal Steuerung erreicht Sammlung von Grund auf neu geladen wird aus der Datenbank wegen Load() Methode lokale erwartet, um diese Eigenschaft bindet, aber Offensichtlich lag ich falsch.

Also habe ich zwei Fragen: Was genau Load() tut, wenn es keine Entitäten von Kontext zu lokal lädt? Und wie kann ich die lokale Sammlung mit anderen Mitteln füllen als Load()?


Weitere Details:

Zuerst ist hier, wie es gebunden: <TextBox Text="{Binding Name}"/> und in Code-behind DataContext = _viewmodel.Accounts;

Diese Accounts Eigenschaft ist genau das, was ich oben geschrieben habe. Und die Name Propery, die es bindet, ist ein Teil der Account-Entität.

Wenn Sie den Namen des Kontos bearbeiten und EntityContext.SaveChanges() nicht aufrufen, wird es in der lokalen Sammlung geändert, ändert sich jedoch nicht in der Datenbank und der Aufruf der Load() -Methode aktualisiert die lokale Sammlung nicht. Es wird nur aktualisiert, wenn das Programm neu gestartet wird (wenn der Kontext neu erstellt wird)

Antwort

0

was genau Load() tut, wenn es keine Entitäten von Kontext zu lokal lädt?

Die Last ist eine Erweiterung auf IQueryable Verfahren, das die Ergebnisse der Abfrage aufzählt. Dies entspricht dem Aufruf von ToList, ohne die Liste tatsächlich zu erstellen. read here from MSDN

wie kann ich bevölkern lokale Sammlung mit anderen Mitteln, aber Load()?

Meinst du refresh? Wenn ja, können Sie das Reload verwenden, das die Entität von der Datenbank neu lädt, wobei alle Eigenschaftswerte mit Werten aus der Datenbank überschrieben werden. als:

  foreach (var entity in _context.ChangeTracker.Entries()) 
     { 
      entity.Reload(); 
     } 

Reload Method MSDN

+0

Vielen Dank für Antwort und die Links. Ich habe diesen Artikel und ein paar andere gesehen, leider hilft es nicht wirklich zu verstehen, wie es das lokale Eigentum von Context bevölkert. Und die Reload() - Methode gehört zur DbEntityEntry-Klasse, und entweder mache ich es falsch oder Sie können diese Methode nicht für ObservableCollection <> -Objekt verwenden. –

+0

yeah, löste es, jetzt habe ich Frage ist die Informationen, die Sie verschachtelte aktualisieren möchten? –

+0

nein es ist nicht verschachtelt –

Verwandte Themen