包含集合时激活 SoftDelete 数据过滤器
Activate SoftDelete data filter when including collections
有没有办法在使用 GetAllIncluding
或 Include
方法时自动激活 "IsSoftDelete" EF Core 过滤器?
public override Task<PublicationDto> Get(EntityDto<Guid> input)
{
var entity = Repository
.GetAllIncluding(x => x.SocialPosts)
.FirstOrDefault(x => x.Id == input.Id);
return Task.FromResult(entity.MapTo<PublicationDto>());
}
ABP 的 EFCore 版本不会自动过滤除查询的根实体以外的任何内容。如果您查看 AbpRepositoryBase 中的实现,ApplyFilters 只会查看查询所基于的实体,而不是任何包含的内容。
if (typeof(ISoftDelete).GetTypeInfo().IsAssignableFrom(typeof(TEntity)))
{
if (UnitOfWorkManager?.Current == null || UnitOfWorkManager.Current.IsFilterEnabled(AbpDataFilters.SoftDelete))
{
query = query.Where(e => !((ISoftDelete)e).IsDeleted);
}
}
在 EF 的常规实现中(使用 EF v6.x),他们使用 DynamicFilters nuget 包来为他们处理这个问题,但 EF Core 不存在该插件。这确实是 EF Core 的局限性,比 ABP 更甚。 EF Core 没有可用于修改从 Include 生成的查询的挂钩,至少我正在阅读的是这样。
因此,这意味着您将需要执行自己的查询来解决此问题。您可以在以下 link:
中了解如何通过使用投影来过滤包含
Filtering include items in LINQ and Entity Framework
您可以使用我对 EF Core 1.x 软删除使用的技巧,或使用 EF core 2
How can I implement "Soft Deletes" with "Entity Framework Core" (aka EF7)?
它将在包含期间过滤实体
我是 late.But 现在有一个叫做 "QueryFilter" 的。
详情:
https://docs.microsoft.com/en-us/ef/core/querying/filters
https://www.meziantou.net/entity-framework-core-soft-delete-using-query-filters.htm
https://spin.atomicobject.com/2019/01/29/entity-framework-core-soft-delete/
MyModel 将被过滤,即使它是一个包含的对象
builder.Entity<MyModel>().HasQueryFilter(m => EF.Property<bool>(m, "isDeleted") == false);
有没有办法在使用 GetAllIncluding
或 Include
方法时自动激活 "IsSoftDelete" EF Core 过滤器?
public override Task<PublicationDto> Get(EntityDto<Guid> input)
{
var entity = Repository
.GetAllIncluding(x => x.SocialPosts)
.FirstOrDefault(x => x.Id == input.Id);
return Task.FromResult(entity.MapTo<PublicationDto>());
}
ABP 的 EFCore 版本不会自动过滤除查询的根实体以外的任何内容。如果您查看 AbpRepositoryBase 中的实现,ApplyFilters 只会查看查询所基于的实体,而不是任何包含的内容。
if (typeof(ISoftDelete).GetTypeInfo().IsAssignableFrom(typeof(TEntity)))
{
if (UnitOfWorkManager?.Current == null || UnitOfWorkManager.Current.IsFilterEnabled(AbpDataFilters.SoftDelete))
{
query = query.Where(e => !((ISoftDelete)e).IsDeleted);
}
}
在 EF 的常规实现中(使用 EF v6.x),他们使用 DynamicFilters nuget 包来为他们处理这个问题,但 EF Core 不存在该插件。这确实是 EF Core 的局限性,比 ABP 更甚。 EF Core 没有可用于修改从 Include 生成的查询的挂钩,至少我正在阅读的是这样。
因此,这意味着您将需要执行自己的查询来解决此问题。您可以在以下 link:
中了解如何通过使用投影来过滤包含Filtering include items in LINQ and Entity Framework
您可以使用我对 EF Core 1.x 软删除使用的技巧,或使用 EF core 2
How can I implement "Soft Deletes" with "Entity Framework Core" (aka EF7)?
它将在包含期间过滤实体
我是 late.But 现在有一个叫做 "QueryFilter" 的。 详情:
https://docs.microsoft.com/en-us/ef/core/querying/filters
https://www.meziantou.net/entity-framework-core-soft-delete-using-query-filters.htm
https://spin.atomicobject.com/2019/01/29/entity-framework-core-soft-delete/
MyModel 将被过滤,即使它是一个包含的对象
builder.Entity<MyModel>().HasQueryFilter(m => EF.Property<bool>(m, "isDeleted") == false);