覆盖实体框架中的删除功能

时间:2010-04-30 12:43:22

标签: asp.net entity-framework entity

如何制作自己的删除方法以防止数据真正被删除? 我想在删除日期时间字段而不是正常删除时设置它。

我读过有关覆盖submitchanges函数的内容,但我没有让它工作

3 个答案:

答案 0 :(得分:4)

处理SavingChanges,浏览上下文中的已删除项目,将其状态更改为已修改,并修改相关字段。

答案 1 :(得分:1)

我编写了一个接口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

这对我很有用!

答案 2 :(得分:0)

如果您不知道如何覆盖删除功能,您可以为数据库中的每个表创建一个ON DELETE触发器,该触发器不会删除,但会设置datetime字段。