lollipop
Goto Top

EntityFramework Core und WPF-Anwendung, speichert nicht

Hallo Miteinander
Irgendwie steh ich auf dem Schlauch.
Deshalb habe ich hier schematisch meine Programmaufbau für eine WPF-Anwendung mit Datenbankanbindung aufgezeigt.

C#, .Net 7.0
EntityFrameWork 7.11
WPF-Anwendung.

In einer externen Klasse rufe ich Daten ab einem SQL-Server ab und zeige den Datensatz in einem Formulare mit Hilfe von einzelnen Textboxen an. Seit kurzem werden mir die Änderungen im Formular nicht mehr zurück in die Datenbank geschrieben. Ich löse die die SaveChanges() Funktion aus verschiedenen Umständen auf.


Meine externe Klasse:
namespace MyNameSpace
{
 public class ClsBoards : INotifyPropertyChanged
 {
     public event PropertyChangedEventHandler? PropertyChanged;
     private void OnPropertyChanged([CallerMemberName] String caller = null)
     {
         var handler = PropertyChanged;
         if (handler != null)
         {
             handler(this, new PropertyChangedEventArgs(caller));
         }
     }

     //	Datenbankkontext setzen
     MyContext db = new MyContext();

     //	Einen einzelnenDatensatz auslesen aus der Datenbank		
     public TblBoard getBoard(int idx)
     {
         return db.TblBoard.Where(j => j.Idx == idx).FirstOrDefault();
     }
 

     // 	Sichern der Daten
     public int SaveMyChanges()
     {
         return db.SaveChanges();
     }
}


Mein XAML-Code mit den Steuerelementen
// Zuweisen der Spaltennamen an die Formularfelder:
<Grid x:Name="MyGrid">  
	<Textbox Text={Binding Path=Name, Mode=TwoWay} />
        <Textbox Text={Binding Path=Material, Mode=TwoWay} />
</Grid>


Code Behind:
Instanz bleibt bestehen.

public ClsBoards clsBoards = new ClsBoards();
//     Die Daten aus der Datenbank abrufen und an den DataContext des Formulars übergeben.
private void GetData()
{
	TblBoard rec = clsBoards.getBoard(25);
	MyGrid.DataContext=null;
	MyGrid.DataContext=rec;
}

//     Wird von einem Button aufgerufen
private void Save()
{
    int Anz=clsBoards.SaveMyChanges();
    Debug.WriteLine(Anz.ToString() + " gespeichert....");  
}


Die Beispiele, welche ich finde, werden die einzelnen Variablen in einer Klasse abgebildet und anschliessend über die OnPropertyChanged(Nameof(nn)); überwacht.

  private string name;
    public string Name
    {
        get { return name; }
        set
        {
            if (name != value)
            {
                name = value;
                OnPropertyChanged(nameof(Name));
            }
        }
    }


Gibt es da eine Möglichkeit, den gesamten Datensatz zu überwachen? Also die Struktur TblBoard?
Gruss und Dank....
Roland

Content-Key: 13906127915

Url: https://administrator.de/contentid/13906127915

Printed on: April 27, 2024 at 05:04 o'clock

Member: DarkZoneSD
DarkZoneSD Sep 20, 2023 at 19:26:07 (UTC)
Goto Top
Moin,

nur mal ein Schuss ins dunkle. Wie authentifiziert sich denn dein Programm bei der Datenbank? Solang nichts am an den Write Methoden zur Datenbank geändert wurde, sollte es ja keinen Grund geben nicht zurück schreiben zu können außer das Problem ist die Datenbank selber, eventuell stimmen die write Berechtigungen nicht ( nichtmehr).

Grüße

Florian
Member: Lollipop
Lollipop Sep 21, 2023 at 04:25:33 (UTC)
Goto Top
Hallo Florian
Danke für den Hinweis. Die Authentifizierung ist kein Problem.
Im selben Formular werden Daten, welche ich in eine Liste abrufe und ändere, in der Datenbank gespeichert.
Gruss Roland
Member: opsec2022
opsec2022 Sep 21, 2023 at 14:25:24 (UTC)
Goto Top
Hallo,

setze doch mal Haltepunkte, debugge den Teil und verfolge relevante Variablen und Objekte in der Watch.

Gruß

OpSec
Member: Lollipop
Solution Lollipop Sep 25, 2023 at 08:03:05 (UTC)
Goto Top
Danke für den Hinweis.

Ich habe eine "alte" Version zurückgespielt, und jetzt kann ich wieder speichern.

Da ich im Ablauf der Speicherung der Daten nichts geändert habe, muss es wohl im Zusammenhang mit anderen Aktivitäten und NugetPackages gestanden haben. Ich kann es mir momentan nicht erklären.

Da ich in den nächsten Wochen wieder viel bei Kunden bin, kann ich mich nicht mehr um die Problematik kümmern und lasse das so stehen.

Gruss Roland