ef core实现软删除

简介: ef core实现软删除

很多web程序一般的偶不会设计真的物理删除了。

基本上都是在在数据库加一个标记,就得当作已经删除了。同时在查询的时候,过滤已经标记删除的数据

ef core实现软删除是非常简单的,直接在OnModelCreating动态创建一个IsDeleted字段,bool类型。然后扔到ef core的查询过滤器里面去。

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            foreach (var entityType in modelBuilder.Model.GetEntityTypes())
            {
                entityType.GetOrAddProperty("IsDeleted", typeof(bool));
                var parameter = Expression.Parameter(entityType.ClrType);
                var propertyMethodInfo = typeof(EF).GetMethod("Property").MakeGenericMethod(typeof(bool));
                var isDeletedProperty = Expression.Call(propertyMethodInfo, parameter, Expression.Constant("IsDeleted"));
                BinaryExpression compareExpression = Expression.MakeBinary(ExpressionType.Equal, isDeletedProperty, Expression.Constant(false));
                var lambda = Expression.Lambda(compareExpression, parameter);
                modelBuilder.Entity(entityType.ClrType).HasQueryFilter(lambda);
            }
        }

然后再保存的时候,扫描实体更改,把状态为Deleted的实体的状态修改为Modified,加上一个IsDeleted的字段,值为false。

ChangeTracker.DetectChanges();
            foreach (var item in ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted))
            {
                item.State = EntityState.Modified;
                item.CurrentValues["IsDeleted"] = true;
            }

这样可以做到在EF中无感知软删除了!

如果需要在查询中查询出已经软删除的数据,直接加上

IgnoreQueryFilters 就行了

blogs = db.Blogs
    .Include(b => b.Posts)
    .IgnoreQueryFilters()
    .ToList();

这样就会把软删除的数据都查询出来。

目录
相关文章
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
497 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
消息中间件 前端开发 网络性能优化
基于RabbitMQ的MQTT实现
基于RabbitMQ的MQTT实现
736 0
|
jenkins 持续交付 开发工具
『Jenkins』Jenkins部署.Net Core——直接跳过坑带你部署
📣读完这篇文章里你能收获到 - 本文将以图文的形式带你一步一步部署 - 对于其中的坑会提前告知跳过,避免踩中
918 0
『Jenkins』Jenkins部署.Net Core——直接跳过坑带你部署
|
7月前
|
人工智能 自然语言处理 物联网
阿里万相重磅开源,人工智能平台PAI一键部署教程来啦
阿里云视频生成大模型万相2.1(Wan)重磅开源!Wan2.1 在处理复杂运动、还原真实物理规律、提升影视质感以及优化指令遵循方面具有显著的优势,轻松实现高质量的视频生成。同时,万相还支持业内领先的中英文文字特效生成,满足广告、短视频等领域的创意需求。阿里云人工智能平台 PAI-Model Gallery 现已经支持一键部署阿里万相重磅开源的4个模型,可获得您的专属阿里万相服务。
|
9月前
|
Linux API C#
基于 .NET 开发的多功能流媒体管理控制平台
基于 .NET 开发的多功能流媒体管理控制平台
146 9
|
NoSQL Linux MongoDB
MongoDB配置用户名和密码
MongoDB配置用户名和密码
2104 0
|
11月前
|
机器学习/深度学习 存储 人工智能
新功能发布!AllData数据中台核心菜单汇总
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
新功能发布!AllData数据中台核心菜单汇总
|
11月前
|
缓存 网络协议 算法
TCP的滑动窗口与拥塞控制
【10月更文挑战第7天】这段内容详细介绍了TCP协议中确保数据包可靠传输的机制,包括使用ID确保顺序性与累计确认、发送端与接收端的缓存管理、超时重传策略及自适应重传算法,以及拥塞控制机制如慢启动、拥塞避免和快速重传。
|
设计模式 测试技术 数据库连接
Entity Framework Core 中的依赖注入超厉害!DI 与 DbContext 完美结合,提升开发效率
【8月更文挑战第31天】依赖注入(DI)是一种软件设计模式,用于将对象的依赖关系与其创建过程解耦,从而提升代码的可测试性、可维护性和可扩展性。在Entity Framework Core中使用DI能够提高可测试性,便于替换DbContext实现以进行单元测试;增强可维护性,使代码模块化并清晰展示组件间的依赖关系;提升可扩展性,方便添加新服务和功能而不需修改现有代码。通过Microsoft.Extensions.DependencyInjection等依赖注入容器,可将DbContext注册并注入到需要使用的类中,简化数据库管理和测试流程。
320 0
|
安全 API 数据库
深入剖析Entity Framework Core中的查询过滤器:实现细粒度数据访问控制的全方位指南与实战代码示例
【8月更文挑战第31天】本文通过实例详细介绍了如何在Entity Framework Core中使用查询过滤器实现细粒度的数据访问控制。从创建基于EF Core的项目、配置数据库上下文到定义领域模型,逐步展示了查询过滤器的应用方法。通过具体代码示例,说明了如何设置全局过滤规则及在不同场景下关闭过滤器,以执行特定查询。此外,还探讨了如何结合用户身份验证和授权,实现基于角色的数据访问控制,确保数据安全性。通过这些步骤,帮助开发者构建高效且安全的数据库访问层。
171 0