Laden...

[erledigt] EF Detached Entity

Erstellt von CyberHunter vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.100 Views
C
CyberHunter Themenstarter:in
131 Beiträge seit 2007
vor 12 Jahren
[erledigt] EF Detached Entity

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();

}


16.834 Beiträge seit 2008
vor 12 Jahren

Wahrscheinlich in Deinem Fall mit


context.<UserTableHere>.Add(user)

Es bietet sich aber immer beim Entity Framework an, mit Repositories zu arbeiten!

1.552 Beiträge seit 2010
vor 12 Jahren

Hallo CyberHunter,

context.Benutzer.Add(user);
//bzw
context.AddObject(user);

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

C
CyberHunter Themenstarter:in
131 Beiträge seit 2007
vor 12 Jahren

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.

16.834 Beiträge seit 2008
vor 12 Jahren

(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.

C
CyberHunter Themenstarter:in
131 Beiträge seit 2007
vor 12 Jahren

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;


C
CyberHunter Themenstarter:in
131 Beiträge seit 2007
vor 12 Jahren

Danke für eure Hilfe.
Habs nun hinbekommen.

Habe auf den Tip von Abt den Zugriff über Repositories gelöst, nun klappts.

Danke