首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架5软删除

实体框架5软删除
EN

Stack Overflow用户
提问于 2014-09-23 10:56:13
回答 2查看 2.8K关注 0票数 2

我正在努力防止在我的数据库表中删除任何内容。目前正在使用实体框架5。首先这里是我的代码,

代码语言:javascript
复制
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(它是我所有db表中的(bit)列)值设置为false。目前,我在网上的文件和共享代码中迷失了方向。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-23 11:02:08

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

代码语言:javascript
复制
public interface ISoftDeletable
{
    bool IsDeleted { get; set; }
}

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

代码语言:javascript
复制
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的实体的查询过滤掉那些被软删除的实体。

票数 7
EN

Stack Overflow用户

发布于 2016-02-03 11:38:01

构建在@BenjaminPauls的伟大答案之上,但是使用了通用的Entries<TEntity>。在我看来,它清理了代码和嵌套的一点点。

代码语言:javascript
复制
public override int SaveChanges()
{
    foreach (var entry in ChangeTracker.Entries<ISoftDeletable>())
    {
        if (entry.State == EntityState.Deleted)
        {
            // Set deleted.
        }
    }
    return base.SaveChanges();
}

甚至:

代码语言:javascript
复制
    public override int SaveChanges()
    {
        foreach (var entry in ChangeTracker.Entries<ISoftDeletable>()
            .Where(x => x.State == EntityState.Deleted)
        {
            // Set deleted.
        }
        return base.SaveChanges();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25993310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档