ABP为实现IMultiTenant接口的实体添加了一个额外的Tenant过滤器。 因此,当我们使用标准存储库时,将应用过滤器:
public class OrderService : ApplicationService, IOrderService, ITransientDependency
{
public IReadOnlyRepository<Order, Guid> _repository { get; set; }
public async Task<OrderDto> GetAsync(Guid id)
{
Order order = await _repository.FindAsync(id); //Is it possible to search among all tenants?
return ObjectMapper.Map<Order, OrderDto>(order);
}
}
看看它产生的查询,似乎必须要有一种避免这种过滤的方法,也许可以通过这样的附加参数或方法来实现。
SELECT TOP(2) *
FROM [AbpOrders] AS [a]
WHERE (@__ef_filter__p_0 = CAST(1 AS bit) OR [a].[TenantId] IS NULL) AND ([a].Id = @__Id_0)
如果我们以某种方式传递'@__ ef_filter__p_0'参数,则它将在所有租户中搜索。 任何帮助表示赞赏。
答案 0 :(得分:0)
这就是您的做法 https://docs.abp.io/en/abp/latest/Data-Filtering#idatafilter-service-enable-disable-data-filters
public class OrderService : ApplicationService, IOrderService, ITransientDependency
{
public IDataFilter DataFilter { get; set; }
public IReadOnlyRepository<Order, Guid> Repository { get; set; }
public async Task<OrderDto> GetAsync(Guid id)
{
//Temporary disable the IMultiTenant filter
using (DataFilter.Disable<Volo.Abp.MultiTenancy.IMultiTenant>())
{
Order order = await Repository.FindAsync(id);
return ObjectMapper.Map<Order, OrderDto>(order);
}
}
}