gpt4 book ai didi

c# - 如何使用 Entity Framework 自动过滤掉软删除的实体?

转载 作者:IT王子 更新时间:2023-10-29 04:07:21 24 4
gpt4 key购买 nike

我正在使用 Entity Framework Code First。我覆盖 DbContext 中的 SaveChanges 以允许我执行“软删除”:

if (item.State == EntityState.Deleted && typeof(ISoftDelete).IsAssignableFrom(type))
{
item.State = EntityState.Modified;
item.Entity.GetType().GetMethod("Delete")
.Invoke(item.Entity, null);

continue;
}

这很好,所以对象知道如何将自己标记为软删除(在这种情况下,它只是将 IsDeleted 设置为 true)。

我的问题是,我怎样才能使它在我检索对象时忽略任何带有 IsDeleted 的对象?所以如果我说 _db.Users.FirstOrDefault(UserId == id) 如果该用户有 IsDeleted == true 它会忽略它。本质上我想过滤?

注意:我不想只放 && IsDeleted == true这就是为什么我用接口(interface)标记类,以便删除知道如何“正常工作”,并且我想以某种方式修改检索以知道如何基于该接口(interface)“正常工作”。

最佳答案

使用EntityFramework.DynamicFilters .它允许您创建全局过滤器,这些过滤器将在执行查询时自动应用(包括针对导航属性)。

项目页面上有一个“IsDeleted”过滤器示例,如下所示:

modelBuilder.Filter("IsDeleted", (ISoftDelete d) => d.IsDeleted, false);

该过滤器将自动在针对 ISoftDelete 实体的任何查询中插入一个 where 子句。过滤器在您的 DbContext.OnModelCreating() 中定义。

免责声明:我是作者。

关于c# - 如何使用 Entity Framework 自动过滤掉软删除的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12698793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com