是否有任何方法將「HasQueryFilter」globaly應用於所有實體?我不想 逐個添加到模型構建器中?ef core 2爲所有實體應用HasQueryFilter
modelBuilder.Entity<Manufacturer>().HasQueryFilter(p => p.IsActive);
是否有任何方法將「HasQueryFilter」globaly應用於所有實體?我不想 逐個添加到模型構建器中?ef core 2爲所有實體應用HasQueryFilter
modelBuilder.Entity<Manufacturer>().HasQueryFilter(p => p.IsActive);
如果你有基類或接口定義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;
}
}
https://stackoverflow.com/ question/45096799/ef-core-2-0-filter-all-queries-trying-to-achieve-soft-delete/45097532#45097532這工作適合我。謝謝。 –
你有一些共同的基類或接口定義了'IsActive'屬性? –
是的我有一個接口,其中只包括IsActive屬性 –
希望此鏈接可能會幫助你http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ – Vignesh