Переопределить функцию удаления в рамках сущности - PullRequest
3 голосов
/ 30 апреля 2010

Как я могу сделать свой собственный метод удаления, чтобы предотвратить удаление данных? Я хочу установить поле даты и времени при его удалении вместо обычного удаления.

Я читал о переопределении функции submitchanges, но у меня она не работает

Ответы [ 3 ]

4 голосов
/ 30 апреля 2010

Обработка SavingChanges, просмотр удаленных элементов в контексте, изменение их состояния на измененное и изменение соответствующего поля.

1 голос
/ 20 мая 2010

Я написал интерфейс IRequiredColumns со свойствами CreatedOn, ModifiedOn и DeletedOn, которые реализует каждый объект. Затем я создал этот частичный класс для контекста:

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

Это прекрасно работает для меня!

0 голосов
/ 30 апреля 2010

Если вы не узнаете, как переопределить функцию удаления, вы можете создать триггер ON DELETE для каждой таблицы в базе данных, которая не удаляет, но устанавливает поле даты и времени.

...