verwendetes Datenbanksystem: <MSSQL2008>
Hallo zusammen,
Ich habe eine WPF Anwendung mit einem Datagrid dessen Property "CanUserAddRows" auf True gesetzt ist.
Nun möchte ich im RowEditEnding Event des Datagrids die änderunge in die DB zurück speichern.
Das Problem ist bei den neu hinzugefügten Zeilen zum Datagrid.
Die neuen Zeilen haben den EntityState Detached.
Ich habe versucht diese mittels .Attach() hinzuzufügen jedoch ohne erfolg.
Auch den EntityState in Added zu ändern funktioniert nicht.
Kann mir jemand einen Tip geben wie ich diese neuen Zeile erfolgreich zum context hinzufügen kann?
Danke
CyberHunter
private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
var user = e.Row.Item as EntityDataModel.Benutzer;
if (user.EntityState == System.Data.EntityState.Detached)
context.Attach(user);
context.SaveChanges();
}
Wahrscheinlich in Deinem Fall mit
context.<UserTableHere>.Add(user)
Es bietet sich aber immer beim Entity Framework an, mit Repositories zu arbeiten!
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke für deine Antwort.
Wenn ich es so mache bekomme ich die Meldung:
Fehlermeldung:
Ein Objekt mit demselben Schlüssel ist bereits im ObjectStateManager vorhanden.
(Mein WPF-Wissen ist nun nich die Krönung.. daher vermute ich mal)
Kann es sein, dass Du zum Kontext eine Bindung hast?
So fügt das Grid automatisch einen Eintrag in den Kontext, den Du nur noch mit SaveChanges
übernehmen musst.
Würde jedenfalls die Tatsache erklären, dass der State auf Detached
steht und ein Add
sagt, es ist bereits im Kontext.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Mit nur SaveChanges() wird die neue Zeile nicht in die DB geschrieben.
Eine Bindung zum Kontext gibt es keine.
Das DataGrid befülle ich so:
context = new EntityDataModel.BenutzerEntities();
datagrid.ItemsSource = context.Benutzer;
Danke für eure Hilfe.
Habs nun hinbekommen.
Habe auf den Tip von Abt den Zugriff über Repositories gelöst, nun klappts.
Danke