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....
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!