3 Stimmen

Überschreibung der Löschfunktion im Entity Framework

Wie kann ich meine eigene Löschmethode erstellen, um zu verhindern, dass die Daten wirklich gelöscht werden? Ich möchte ein Datumsfeld setzen, wenn es anstelle eines normalen Löschvorgangs gelöscht wird.

Ich habe gelesen, dass man die Funktion submitchanges überschreiben kann, aber ich bekomme es nicht hin

4voto

Craig Stuntz Punkte 124703

Handgriff SavingChanges Gehen Sie die gelöschten Elemente im Kontext durch, ändern Sie ihren Status auf geändert und ändern Sie das betreffende Feld.

1voto

FabianAlbrecht Punkte 41

Ich habe eine Schnittstelle IRequiredColumns mit den Eigenschaften CreatedOn, ModifiedOn und DeletedOn geschrieben, die jede Entität implementiert. Dann habe ich diese partielle Klasse für den Kontext erstellt:

Partial Public Class Context
Public Overrides Function SaveChanges(ByVal options As System.Data.Objects.SaveOptions) As Integer
    For Each entry As ObjectStateEntry In ObjectStateManager.GetObjectStateEntries(EntityState.Added Or EntityState.Modified Or EntityState.Deleted)
        If TypeOf (entry.Entity) Is IRequiredColumns Then
            Dim entity As IRequiredColumns = CType(entry.Entity, IRequiredColumns)

            Select Case entry.State
                Case EntityState.Added
                    entity.CreatedOn = Now
                Case EntityState.Modified
                    entity.ModifiedOn = Now
                Case EntityState.Deleted
                    entry.ChangeState(EntityState.Modified)
                    entity.DeletedOn = Now                        
            End Select
        End If
    Next

    Return MyBase.SaveChanges(options)
End Function
End Class

Das funktioniert bei mir hervorragend!

0voto

Draco Ater Punkte 20389

Wenn Sie nicht herausfinden, wie Sie die Löschfunktion überschreiben können, können Sie einen ON DELETE Trigger für jede Tabelle in der Datenbank erstellen, der nicht löscht, sondern das Datumsfeld setzt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X