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-ID: 13906127915

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

DarkZoneSD
DarkZoneSD 20.09.2023 um 21:26:07 Uhr
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
Lollipop
Lollipop 21.09.2023 um 06:25:33 Uhr
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
opsec2022
opsec2022 21.09.2023 um 16:25:24 Uhr
Goto Top
Hallo,

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

Gruß

OpSec
Lollipop
Lösung Lollipop 25.09.2023 um 10:03:05 Uhr
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