Wie lösche ich ein Objekt aus einem Entity Framework-Modell, ohne es vorher zu laden?

asp.net-mvc entity-framework linq-to-entities

Frage

Ich bin mir ziemlich sicher, dass ich die Antwort auf diese Frage irgendwo gesehen habe, aber da ich sie mit ein paar Suchvorgängen bei SO oder Google nicht finden konnte, frage ich sie trotzdem noch einmal ...

In Entity Framework scheint die einzige Möglichkeit ein Datenobjekt zu löschen

MyEntityModel ent = new MyEntityModel();
ent.DeleteObject(theObjectToDelete);
ent.SaveChanges();

Bei diesem Ansatz muss das Objekt jedoch zuerst in den Controller geladen werden, um es nur zu löschen. Gibt es eine Möglichkeit, ein Geschäftsobjekt zu löschen, das beispielsweise nur seine ID referenziert?

Wenn Sie Linq- oder Lambda-Ausdrücke intelligenter verwenden, ist das auch in Ordnung. Das Hauptziel besteht jedoch darin, das Laden von Daten zu vermeiden, nur um sie zu löschen.

Akzeptierte Antwort

Es ist wichtig zu wissen, dass das Entity Framework sowohl Linq to Entities als auch Entity SQL unterstützt. Wenn Sie Löschungen oder Aktualisierungen ExecuteNonQuery , die möglicherweise viele Datensätze betreffen, können Sie das Äquivalent von ExecuteNonQuery .

In Entity SQL könnte dies aussehen

   Using db As New HelloEfEntities

        Dim qStr = "Delete " & _
                  "FROM Employee"
        db.ExecuteStoreCommand(qStr)
        db.SaveChanges()
    End Using

In diesem Beispiel ist db mein ObjectContext . Beachten Sie auch, dass die ExecuteStoreCommand Funktion ein optionales Array von Parametern benötigt.


Beliebte Antwort

Ich habe diesen Beitrag gefunden , der besagt, dass es wirklich keinen besseren Weg gibt, Datensätze zu löschen. Als Erklärung wurde angegeben, dass alle Fremdschlüssel, Relationen usw., die für diesen Datensatz eindeutig sind, ebenfalls gelöscht werden. EF muss daher die richtigen Informationen zum Datensatz haben. Ich bin verblüfft, warum dies nicht ohne Laden von Daten erreicht werden konnte. Da dies jedoch nicht sehr oft vorkommt, habe ich mich entschlossen, vorerst nicht zu stören.

Wenn Sie eine Lösung für dieses Problem haben, lassen Sie es mich wissen =)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum