2016-04-27 2 views
0

Mein Problem:Wie Entity Framework Kontext aktualisieren Form beim Schließen und Rückkehr Form zu meistern

Ich versuche, Master-Detail-Form zu machen. Mit der Taste f5, wenn ich im Bearbeitungsmodus in meiner Hauptform bin, rufe ich Zoom() auf und öffne ein neues Formular, wo ich etwas mehr hinzufügen kann, was mit meinem Hauptformular-Datagrid zusammenhängt.

Wenn ich etwas mehr Sachen hinzufügen oder löschen und speichern, und schließe dieses Formular und kehre zu meinem Hauptformular zurück. Die Änderungen in diesem Hauptformular werden nicht notiert. Wenn ich mein Hauptformular schließe und wieder öffne, werden Änderungen angezeigt.

Hier als ein Beispiel löschte ich g2 und gespeichert, wenn ich zu meinem Hauptformular zurückkomme und versuche, existierende Artikel zu bearbeiten, oder sogar neue Artikel hinzufügen, wird es immer noch g2 als existierend zeigen. Wenn ich jedoch meine zweite Form mit f5 wieder öffne, kann ich deutlich sehen, dass der Datensatz tatsächlich nicht existiert. Wenn ich mein Hauptformular schließe und wieder öffne, werden die Änderungen angezeigt.

Main form edit mode - pressing f5 from here will cause Zoom() to be called

My second form and items in it

[Gelöschte g2 und gespeichert] [3]

[g2 ist noch in Hauptformular] [4]

[auch wenn ich abbrechen/speichern und versuchen Sie, einen neuen Artikel hinzuzufügen] [5]

[Bei Schließen und Öffnen werden Änderungen vorgenommen] [6]

Links in Kommentaren

Bisher habe ich versucht:

Unmittelbar nach

master.Entry (a) .reload,

masterEntities Master = new masterEntities neuer Form Aufruf(),

Die Datenquelle der Bindungsquelle wird angepasst predmetbindingsource.datasource = master.predmets.AsNoTracking(). ToListAsync();

und .resetcurrentitem()

Einige Code:

Hauptform:

private async void Zoom() 
    { 
     if (nastavniPlanProgramsDataGridView.SelectedCells.Count == 1 && nastavniPlanProgramsDataGridView.SelectedCells[0].ColumnIndex == 0) 
      { 
       NastavniPlanProgramForm f2 = new NastavniPlanProgramForm(); 

       if (f2.ShowDialog() == DialogResult.OK) 
       { 


        predmetBindingSource.DataSource = await master.Predmets.AsNoTracking().ToListAsync(); 

        Predmet a = (Predmet)f2.Selected; 
        NastavniPlanProgram s = (NastavniPlanProgram)nastavniPlanProgramsBindingSource.Current; 
        s.idPredmet = a.idPredmet; 

       } 

      } 
     } 

Entität, die ich bin ändert Predmet genannt, es ist Binding ist predmetbindingsource, und mein Kontext heißt Master und wird global am Anfang meines Hauptformulars initialisiert:

public partial class Studijski_program : Form 
{ 

    masterEntities master = new masterEntities(); 


    public Studijski_program() 
    {   
     InitializeComponent(); 

// blablabla ..

In dieser anderen Form beim Schließen i Kontext gerade mache.() Entsorgen

+0

[3]: http://i.stack.imgur.com/wOZcT.jpg [4]: ​​http://i.stack.imgur.com/VEwSn.jpg [5]: http://i.stack.imgur.com/S2ZQo.jpg [6]: http://i.stack.imgur.com/3pxLL.jpg – maran

Antwort

0

Ihr Code ist ein bisschen schwer zu lesen, zum Teil, weil ich vermute, dass es nicht in Englisch, aber hier sind ein paar Beobachtungen:

Ich gehe davon aus, dass masterEntities von DbContext abgeleitet ist. DbContext s sollte vorübergehend sein und nur für die Lebenszeit einer Anfrage dauern. Sie sollten für eine sehr lange Zeit nicht da sein. Einer der Gründe, warum wir sie vorübergehend halten, ist, dass sie eine Menge Caching durchführen und dass Probleme beim Caching zu Symptomen führen können, wie Sie sie gerade erleben.

Versuchen Sie einen neuen masterEntities Instanziieren rechts, bevor Sie es

Abfrage
var db = new masterEntities(); 
predmetBindingSource.DataSource = await db.Predmets.AsNoTracking().ToListAsync(); 

wenn das nicht funktioniert, The debugger verwenden zu überprüfen und sehen, ob es tatsächlich ein-DbContext verwandtes Thema. Erstellen Sie einen Haltepunkt nach der Zeile, die predmetBindingSource.DataSource setzt, und stellen Sie sicher, dass es tatsächlich festgelegt wurde.

Verwandte Themen