liuying
2025-09-24 6efa5f6ca7536a37e3af3592bb42db63bcb8371d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using Furion.DatabaseAccessor.Extensions;
 
namespace Furion.DatabaseAccessor
{
    public static class FakeDeleteExtensions
    {
        /// <summary>
        /// 主键名称
        /// </summary>
        private static string PrimaryKeyName { get; set; } = "Id";
 
        /// <summary>
        /// 假删除列名
        /// </summary>
        private static string FakeDeleteColumnName { get; set; } = "IsDeleted";
 
        /// <summary>
        /// 假删除,根据id删除
        /// </summary>
        public static void FakeDelete<TEntity>(this IPrivateRepository<TEntity> repository, int id)
            where TEntity : class, IPrivateEntity, new()
        {
            // 创建实体对象并设置主键值
            var entity = Activator.CreateInstance<TEntity>();
            var PrimaryKeyProperty = typeof(TEntity).GetProperty(PrimaryKeyName);
            PrimaryKeyProperty.SetValue(PrimaryKeyName, id);
            repository.FakeDelete(entity);
        }
 
        /// <summary>
        /// 假删除
        /// </summary>
        public static void FakeDelete<TEntity>(this IPrivateRepository<TEntity> repository, TEntity entity)
            where TEntity : class, IPrivateEntity, new()
        {
            var fakedeleteProperty = repository.EntityType.ClrType.GetProperty(FakeDeleteColumnName);
            fakedeleteProperty.SetValue(entity, true);
            repository.UpdateInclude(entity, new[] { fakedeleteProperty.Name });
        }
 
        /// <summary>
        /// 假删除立即执行,根据id删除
        /// </summary>
        public static void FakeDeleteNow<TEntity>(this IPrivateRepository<TEntity> repository, long id)
           where TEntity : class, IPrivateEntity, new()
        {
            // 创建实体对象并设置主键值
            var entity = Activator.CreateInstance<TEntity>();
            var PrimaryKeyProperty = typeof(TEntity).GetProperty(PrimaryKeyName);
            PrimaryKeyProperty.SetValue(entity, id);
            repository.FakeDeleteNow(entity);
        }
 
        /// <summary>
        /// 假删除立即执行
        /// </summary>
        public static void FakeDeleteNow<TEntity>(this IPrivateRepository<TEntity> repository, TEntity entity)
            where TEntity : class, IPrivateEntity, new()
        {
            var fakedeleteProperty = repository.EntityType.ClrType.GetProperty(FakeDeleteColumnName);
            fakedeleteProperty.SetValue(entity, true);
            repository.UpdateIncludeNow(entity, new[] { fakedeleteProperty.Name });
        }
 
        /// <summary>
        /// 异步假删除
        /// </summary>
 
        public static async Task FakeDeleteAsync<TEntity>(this IPrivateRepository<TEntity> repository, long id)
           where TEntity : class, IPrivateEntity, new()
        {
            // 创建实体对象并设置主键值
            var entity = Activator.CreateInstance<TEntity>();
            var PrimaryKeyProperty = typeof(TEntity).GetProperty(PrimaryKeyName);
            PrimaryKeyProperty.SetValue(entity, id);
            await repository.FakeDeleteAsync(entity);
        }
 
        /// <summary>
        /// 异步假删除
        /// </summary>
        public static async Task FakeDeleteAsync<TEntity>(this IPrivateRepository<TEntity> repository, TEntity entity)
            where TEntity : class, IPrivateEntity, new()
        {
            var fakedeleteProperty = repository.EntityType.ClrType.GetProperty(FakeDeleteColumnName);
            fakedeleteProperty.SetValue(entity, true);
            await repository.UpdateIncludeAsync(entity, new[] { fakedeleteProperty.Name });
        }
 
        //扩展在entity上的假删除
 
        /// <summary>
        /// 异步假删除
        /// </summary>
        public static async Task FakeDeleteAsync<TEntity>(this TEntity entity)
            where TEntity : class, IPrivateEntity, new()
        {
            var fakedeleteProperty = typeof(TEntity).GetProperty(FakeDeleteColumnName);
            fakedeleteProperty.SetValue(entity, true);
            await entity.UpdateIncludeAsync(new[] { fakedeleteProperty.Name });
        }
 
        /// <summary>
        /// 异步假删除,立即执行
        /// </summary>
        public static async Task FakeDeleteNowAsync<TEntity>(this TEntity entity)
          where TEntity : class, IPrivateEntity, new()
        {
            var fakedeleteProperty = typeof(TEntity).GetProperty(FakeDeleteColumnName);
            fakedeleteProperty.SetValue(entity, true);
            await entity.UpdateIncludeNowAsync(new[] { fakedeleteProperty.Name });
        }
 
        /// <summary>
        /// 假删除
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="entity"></param>
        public static void FakeDelete<TEntity>(this TEntity entity)
           where TEntity : class, IPrivateEntity, new()
        {
            var fakedeleteProperty = typeof(TEntity).GetProperty(FakeDeleteColumnName);
            fakedeleteProperty.SetValue(entity, true);
            entity.UpdateInclude(new[] { fakedeleteProperty.Name });
        }
 
        /// <summary>
        /// 假删除立即执行
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="entity"></param>
        public static void FakeDeleteNow<TEntity>(this TEntity entity)
          where TEntity : class, IPrivateEntity, new()
        {
            var fakedeleteProperty = typeof(TEntity).GetProperty(FakeDeleteColumnName);
            fakedeleteProperty.SetValue(entity, true);
            entity.UpdateIncludeNow(new[] { fakedeleteProperty.Name });
        }
    }
}