Entwickler-Ecke

WPF / Silverlight - Speichern mit Entity-Model


jonesdeliver - Fr 17.05.13 15:19
Titel: Speichern mit Entity-Model
Nochmals Moin

Vielleicht weiß jemand einen Rat.Vorab der Code:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        public static void Speichern(List<tbl_Eintraege> _liste)
        {
            try
            {
                foreach (var _stati in _liste)
                {
                    if (_stati.EntityState == System.Data.EntityState.Modified)
                    {
                        db.AddTotbl_Eintraege(_stati);  
                    }
                }
                db.SaveChanges();
            }
            catch (Exception ex){}

Das Problem: in der DB werden keine Änderungen vorgenommen. Es scheint an der Überladung zu liegen, die aus einem aus der DB geladenen, aber im Verlauf der Bearbeitung veränderten Objekt besteht. Jedenfalls klappt das Speichern sonst immer prima, aber da sind die Objekte auch nicht geändert.
Sofern ich EntityState.Detached ausführe, will das Model einen doppelten Schlüssel ablegen, was es natürlich hinhaut.
Wo ist hier der Fehler???


daeve - Fr 24.05.13 19:01

willst du änderungen an einem Objekt machen das bereits besteht in der DB ?

verstehe ich das richtig ? dann wird es so glaube ich kaum funktionieren.


jonesdeliver - Mo 27.05.13 17:41

Nein, also grundsätzlich ist die Frage, wie ich den Inhalt eines DataGrids in die Tabelle zurückspeichern kann.

Das funktioniert nämlich soweit gut, nur seit ich ein DG mit einem Linq-Join aus mehreren Tabellen fülle, scheint es als könne nicht einfach mehr der Inhalt des DGs zurück gespeichert werden wie sonst üblich und möglich???
Stehe hier vollständig auf dem Schlauch.

Nach obiger SpeicherMethode kann ich weder eine Liste noch ein Objekt erfolgreich an die DB zurückgeben, selbst dann nicht, wenn das Objekt nur aus Werten besteht, die die Datenbank 100%ig kennen müßte.

Oder anders formuliert:
Wie verteile ich die Werte des DGs wieder zurück an die Tabellen, aus denen sie stammen?


daeve - Mo 27.05.13 18:11

Wenn du per Linq eine Abfrage macht aus mehreren Tabellen erstellst du dir ein neues Objekt(Liste) ?

Wenn ja hat das EntityFramework den Context verloren, Sprich du müsstest manuell die Datensätze löschen in der DB und danach die aktuellen einfügen....

Ich empfehle dir aber direkt mit dem Contextobjekt zu arbeiten ( Binding an das DG ), dann kannst du das Datagrid bearbeiten Wie du willst und danach nur die Methode SaveChanges() aufrufen.

http://stackoverflow.com/questions/5793619/binding-entity-framework-objects-to-a-datagridview-c-sharp

Das sollte dir helfen


jonesdeliver - Di 28.05.13 18:16

Danke für den Hinweis, das klappt soweit vielleicht ganz gut, wenn mir die Maschine nicht plötzlich melden würde, ich hätte keine Definition für EntityState ???
Es ist echt immer wieder dasselbe: ich weiß was der Eimer machen soll, aber er versteht mich einfach nicht.


daeve - Di 28.05.13 18:22

ja also so sollte es schon funktionieren, mit deiner fehlermeldung kann ich so nicht viel anfangen.
Aber google das doch mal...sollte nicht so schwierig sein ;)

sonst bitte genauen fehlerbeschrieb mit code....