c# - Entity Framework 5 软删除

标签 c# entity-framework soft-delete

我试图阻止对我的数据库表的任何删除。目前正在使用 Entity Framework 5。首先这是我的代码,

public override int SaveChanges()
    {
        var Changed = ChangeTracker.Entries();
        if (Changed != null)
        {
            foreach (var entry in Changed.Where(e => e.State == EntityState.Deleted))
            {
                entry.State = EntityState.Unchanged;
            }
        }

        return base.SaveChanges();
    }

我已经设法用这种方式阻止了它。当我使用 EF 的 Remove 方法时,它不再工作了。但是,我想要实现的是,当我对给定 ID 使用 remove 方法时,我想设置 isDeleted(这是我所有数据库中的一个(位)列表)值为假。目前,我迷失在互联网上的文档和共享代码中。

谢谢

最佳答案

我可能会通过让可软删除的实体实现一个接口(interface)来处理这个问题,比如 ISoftDeletable。

public interface ISoftDeletable
{
    bool IsDeleted { get; set; }
}

然后扩展上面的代码以检查实体类型是否实现了 ISoftDeletable 接口(interface),如果它只是将 IsDeleted 设置为 true。

public override int SaveChanges()
    {
        var Changed = ChangeTracker.Entries();
        if (Changed != null)
        {
            foreach (var entry in Changed.Where(e => e.State == EntityState.Deleted))
            {
                entry.State = EntityState.Unchanged;
                if (entry.Entity is ISoftDeletable)
                {
                    // Set IsDeleted....
                }
            }
        }

        return base.SaveChanges();
    }

然后您需要确保对实现 ISoftDeletable 的实体的查询过滤掉那些被软删除的实体。

关于c# - Entity Framework 5 软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25993310/

相关文章:

php - Laravel 软删除唯一列名

c# - 为什么我们在调用方法时需要使用 out 关键字

c# - 输入 public int a 后报错

c# - Razor .NET 文件 (cshtml) 中的 URL 解码

asp.net - Entity Framework 6 EntityDataSource 未在 DbContext 中调用 SaveChanges

java - 在 Hibernate 中使用@MappedSuperClass 进行软删除

c# - .net core API 文件上传无法在 Azure 上运行

entity-framework - 在 Entity Framework 代码优先方法中,两个字段的组合必须是唯一的。怎么会

c# - Entity Framework 中的 LINQ to Entities 不支持 LINQ 表达式节点类型 'Invoke'

c# - 软删除休眠