ABP框架禁用软删除 - IUnitOfWorkManager实现 - 代码示例
要禁用ABP框架中的软删除功能,可以在IUnitOfWorkManager接口的实现类中进行相应的修改。\n\n1. 打开IUnitOfWorkManager接口的实现类,默认为UnitOfWorkManager.cs。\n2. 在类的构造函数中注入IEntityChangeEventHelper接口。\n\ncsharp\nprivate readonly IEntityChangeEventHelper _entityChangeEventHelper;\n\npublic UnitOfWorkManager(\n IUnitOfWorkDefaultOptions defaultOptions,\n IUnitOfWorkFilterExecuter filterExecuter,\n IUnitOfWorkInterceptor interceptor,\n IUnitOfWorkTransactionBehaviour transactionBehaviour,\n ICurrentUnitOfWorkProvider currentUnitOfWorkProvider,\n IConnectionStringResolver connectionStringResolver,\n IDbContextResolver dbContextResolver,\n IUnitOfWorkDefaultOptionsAccessor defaultOptionsAccessor,\n IEntityChangeEventHelper entityChangeEventHelper)\n : base(\n defaultOptions,\n filterExecuter,\n interceptor,\n transactionBehaviour,\n currentUnitOfWorkProvider,\n connectionStringResolver,\n dbContextResolver,\n defaultOptionsAccessor)\n{\n _entityChangeEventHelper = entityChangeEventHelper;\n}\n\n\n3. 修改Complete方法,禁用软删除。\n\ncsharp\npublic override void Complete(UnitOfWorkCompleteHandle completeHandle)\n{\n var unitOfWorks = GetAllUow();\n\n try\n {\n var eventData = new EntityChangeEntryEventData();\n foreach (var uow in unitOfWorks)\n {\n uow.Complete();\n uow.SaveChanges();\n\n // 禁用软删除\n foreach (var entity in uow.ChangeTracker.Entries())\n {\n if (entity.Entity is ISoftDelete)\n {\n var softDeleteEntity = entity.Entity as ISoftDelete;\n softDeleteEntity.IsDeleted = false;\n }\n }\n\n // 触发实体更改事件\n _entityChangeEventHelper.TriggerEvents();\n }\n completeHandle.Complete();\n }\n catch (Exception ex)\n {\n completeHandle.Exception = ex;\n throw;\n }\n finally\n {\n unitOfWorks.Reverse();\n foreach (var uow in unitOfWorks)\n {\n uow.Dispose();\n }\n }\n}\n\n\n4. 这样就可以在使用UnitOfWorkManager的地方禁用软删除功能了。
原文地址: https://www.cveoy.top/t/topic/qrNQ 著作权归作者所有。请勿转载和采集!