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 のforeach(VARの 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()。