使用IgnoreQueryFilter加载相关数据

时间:2018-05-21 17:19:32

标签: c# asp.net entity-framework-core

使用Queryfilter时更新所有相关实体的最佳方法是什么?

我的所有实体都使用" IsDeleted"从BaseClass继承。属性。

当我构建我的上下文时,我使用

if (table.GetProperties().Any(column => column.ClrType == typeof(bool) && column.Name == "IsDeleted"))
{
      var parameter = Expression.Parameter(table.ClrType);
      var propertyMethodInfo = typeof(EF).GetMethod("Property").MakeGenericMethod(typeof(bool));
      var isDeletedProperty = Expression.Call(propertyMethodInfo, parameter, Expression.Constant("IsDeleted"));
      BinaryExpression compareExpression = Expression.MakeBinary(ExpressionType.Equal, isDeletedProperty, Expression.Constant(false));
      var lambda = Expression.Lambda(compareExpression, parameter);
      builder.Entity(table.ClrType).HasQueryFilter(lambda);
}

HasQueryfilter忽略所有已删除的实体。 SoftDelete。

当我尝试更新我的所有收藏集时,我只会收到过滤收藏品。所以它永远不可能用真值更新我的IsDelete属性。

if (entry.State == EntityState.Modified)
{
    foreach (var collectionEntry in _context.Entry(dbMember).Collections)
    {
        await collectionEntry.LoadAsync();
        foreach (var o in collectionEntry.CurrentValue)
        {
            var entity = o as BaseEntity;
            entity.IsDeleted = dbMember.IsDeleted;
        }
    }
}

我需要的是像

await collectionEntry.LoadAsync()。IgnoreQueryFilters()。

0 个答案:

没有答案