Objekt-Problem beim Entity-Framework löschen

ado.net c# entity-framework

Frage

Ich erhalte die Meldung "Das Objekt kann nicht gelöscht werden, da es nicht im ObjectStateManager gefunden wurde". während Objekt löschen.

Hier sind Codes;

//first i am filling listview control.
 private void Form1_Load(object sender, EventArgs e)
    {
        FirebirdEntity asa = new FirebirdEntity();

        ObjectQuery<NEW_TABLE> sorgu = asa.NEW_TABLE;

        foreach (var item in sorgu)
        {
            ListViewItem list = new ListViewItem();
            list.Text = item.AD;
            list.SubItems.Add(item.SOYAD);
            list.Tag = item;
            listView1.Items.Add(list);

        }
//than getting New_table entity from listview's tag property.
 private void button3_Click(object sender, EventArgs e)
    {

            using (FirebirdEntity arama = new FirebirdEntity())
            {

               NEW_TABLE del = (NEW_TABLE)listView1.SelectedItems[0].Tag;
               arama.DeleteObject(del);
               arama.SaveChanges();


            }}

Akzeptierte Antwort

Sie müssen das Objekt an den ObjectContext anhängen . Versuchen:

NEW_TABLE del = (NEW_TABLE)listView1.SelectedItems[0].Tag;
arama.Attach(del);
arama.DeleteObject(del);
arama.SaveChanges();

Angehängte Objekte werden vom ObjectContext . Dies ist zum Löschen und Aktualisieren erforderlich. Weitere Informationen zum Anhängen von Objekten finden Sie in MSDN.

Bearbeiten, um das Anhängen / Lösen zu verdeutlichen:

private void Form1_Load(object sender, EventArgs e) {
    FirebirdEntity asa = new FirebirdEntity();

    ObjectQuery<NEW_TABLE> sorgu = asa.NEW_TABLE;
    foreach (var item in sorgu) {
        asa.Detach(item);
        // add to listView1
    }
}

Außerdem sollten Sie Ihre Benutzung wickeln ObjectContext s in using Blöcken.


Beliebte Antwort

In Ihrer Methode "Form1_Load" erstellen Sie eine FIRST-Instanz Ihres "FirebirdEntity" -Kontexts und füllen das ListViewItem mit Entitäten aus diesem Kontext

In Ihrer Methode "button3_Click" erstellen Sie eine NEUE, ZWEITE Instanz Ihres "FirebirdEntity" -Kontexts. Dann versuchen Sie, eine Entität in diesem zweiten Kontext zu löschen, die im FIRST-Kontext ausgewählt wurde.

Verwenden Sie in beiden Methoden dieselbe Instanz Ihres Kontexts, und alles funktioniert einwandfrei.

(Alternativ können Sie die Entität auswählen, die Sie aus Ihrem zweiten Kontext löschen möchten, und diese Entität dann anstelle des Ursprungs löschen.)



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow