反射フィルタ式ツリーによって構成EFグローバルフィルタおよび

1.ソフトの削除インタフェース

1つの パブリック インターフェースISoftDelete
 2      {
 3          BOOL IsDeletedは{ 得ますセット; }
 4      }

2.エンティティクラスの実装

1つの パブリック クラスはTestDeleted:ISoftDelete
 2      {
 3          公共 のint Idは{ を取得しますセット; }
 4  
5          パブリック 文字列名前{ 得ますセット; }
 6          パブリック ブール値 {IsDeleted 得ますセット; }
 7  
8  
9      }

3.modelBuilder拡張クラス

1  パブリック 静的 クラスCustomModelBuilderExtensions
 2      {
 3          パブリック 静的 ボイド AddSoftDeleted(このModelBuilderのビルダー)
 4          {
 5              VAR entityTypes = builder.Model.GetEntityTypes()ここで、(E =>。typeof演算(ISoftDelete).IsAssignableFrom(e.ClrType))。
6              のforeachVARの entityType entityTypes)
 7              {
 8                  VARパラメータ= Expression.Parameter(entityType.ClrType)。
9  
10                  VARpropertyMethodInfo = typeof演算(EF).GetMethod(" プロパティ").MakeGenericMethod(typeof演算BOOL ))。
11  
12                  VAR isDeletedProperty = Expression.Call(propertyMethodInfo、パラメータ、Expression.Constant(" IsDeleted " ))。
13  
14                  BinaryExpressionをcompareExpression = Expression.MakeBinary(ExpressionType.Equal、isDeletedProperty、Expression.Constant())。
15  
16                  のvar lambdaExpression = Expression.Lambda(compareExpression、パラメータ)
17  
18                 builder.Entity(entityType.ClrType).HasQueryFilter(lambdaExpression)。
19              }
 20          }
 21      }

4.データベース移行

グローバルプロセスを用いたスクリーニング方法5. OnModelCreating

1 builder.AddSoftDeleted()。

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/Spinoza/p/11831205.html