Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ardalis.Specification.EntityFrameworkCore
{
public class IgnoreQueryFiltersEvaluator : IEvaluator
{
private IgnoreQueryFiltersEvaluator() { }
public static IgnoreQueryFiltersEvaluator Instance { get; } = new IgnoreQueryFiltersEvaluator();

public bool IsCriteriaEvaluator { get; } = true;

public IQueryable<T> GetQuery<T>(IQueryable<T> query, ISpecification<T> specification) where T : class
{
if (specification.IgnoreQueryFilters)
{
query = query.IgnoreQueryFilters();
}

return query;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public SpecificationEvaluator(bool cacheEnabled = false)
OrderEvaluator.Instance,
PaginationEvaluator.Instance,
AsNoTrackingEvaluator.Instance,
IgnoreQueryFiltersEvaluator.Instance,
#if NETSTANDARD2_1
AsSplitQueryEvaluator.Instance,
AsNoTrackingWithIdentityResolutionEvaluator.Instance
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,5 +261,21 @@ public static ISpecificationBuilder<T> AsNoTrackingWithIdentityResolution<T>(

return specificationBuilder;
}

/// <summary>
/// The query will ignore the defined global query filters
/// </summary>
/// <remarks>
/// for more info: https://docs.microsoft.com/en-us/ef/core/querying/filters
/// </remarks>
/// <typeparam name="T"></typeparam>
/// <param name="specificationBuilder"></param>
public static ISpecificationBuilder<T> IgnoreQueryFilters<T>(
this ISpecificationBuilder<T> specificationBuilder) where T : class
{
specificationBuilder.Specification.IgnoreQueryFilters = true;

return specificationBuilder;
}
}
}
8 changes: 8 additions & 0 deletions Specification/src/Ardalis.Specification/ISpecification.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,14 @@ public interface ISpecification<T>
/// </remarks>
bool AsNoTrackingWithIdentityResolution { get; }

/// <summary>
/// Returns whether or not the query should ignore the defined global query filters
/// </summary>
/// <remarks>
/// for more info: https://docs.microsoft.com/en-us/ef/core/querying/filters
/// </remarks>
bool IgnoreQueryFilters { get; }

/// <summary>
/// Applies the query defined within the specification to the given objects.
/// This is specially helpful when unit testing specification classes
Expand Down
3 changes: 3 additions & 0 deletions Specification/src/Ardalis.Specification/Specification.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,5 +94,8 @@ public virtual IEnumerable<T> Evaluate(IEnumerable<T> entities)

/// <inheritdoc/>
public bool AsNoTrackingWithIdentityResolution { get; internal set; } = false;

/// <inheritdoc/>
public bool IgnoreQueryFilters { get; internal set; } = false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Ardalis.Specification.UnitTests.Fixture.Specs;
using FluentAssertions;
using Xunit;

namespace Ardalis.Specification.UnitTests.BuilderTests
{
public class SpecificationBuilderExtensions_IgnoreQueryFilters
{
[Fact]
public void DoesNothing_GivenSpecWithoutIgnoreQueryFilters()
{
var spec = new StoreEmptySpec();

spec.IgnoreQueryFilters.Should().Be(false);
}

[Fact]
public void FlagsIgnoreQueryFilters_GivenSpecWithIgnoreQueryFilters()
{
var spec = new CompanyByIdIgnoreQueryFilters(1);

spec.IgnoreQueryFilters.Should().Be(true);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Ardalis.Specification.UnitTests.Fixture.Entities;
using System;
using System.Collections.Generic;
using System.Text;

namespace Ardalis.Specification.UnitTests.Fixture.Specs
{
public class CompanyByIdIgnoreQueryFilters : Specification<Company>, ISingleResultSpecification
{
public CompanyByIdIgnoreQueryFilters(int id)
{
Query.Where(company => company.Id == id).IgnoreQueryFilters();
}
}
}