2017-08-22 12 views
2

是否有任何方法將「HasQueryFilter」globaly應用於所有實體?我不想 逐個添加到模型構建器中?ef core 2爲所有實體應用HasQueryFilter

modelBuilder.Entity<Manufacturer>().HasQueryFilter(p => p.IsActive); 
+0

你有一些共同的基類或接口定義了'IsActive'屬性? –

+0

是的我有一個接口,其中只包括IsActive屬性 –

+0

希望此鏈接可能會幫助你http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ – Vignesh

回答

1

如果你有基類或接口定義IsActive屬性,可以使用的方法從EF-Core 2.0 Filter all queries (trying to achieve soft delete)

否則你可以迭代實體類型,併爲每種類型具有bool IsActive屬性構建使用Expression類方法動態過濾表達式:

foreach (var entityType in modelBuilder.Model.GetEntityTypes()) 
{ 
    var isActiveProperty = entityType.FindProperty("IsActive"); 
    if (isActiveProperty != null && isActiveProperty.ClrType == typeof(bool)) 
    { 
     var parameter = Expression.Parameter(entityType.ClrType, "p"); 
     var filter = Expression.Lambda(Expression.Property(parameter, isActiveProperty.PropertyInfo), parameter); 
     entityType.QueryFilter = filter; 
    } 
} 
+0

https://stackoverflow.com/ question/45096799/ef-core-2-0-filter-all-queries-trying-to-achieve-soft-delete/45097532#45097532這工作適合我。謝謝。 –