使用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()。