Skip to content

Commit 88a6898

Browse files
authored
Add tests for Include/ThenInclude with TPH inheritance strategy. (#465)
1 parent 691d572 commit 88a6898

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

tests/Ardalis.Specification.EntityFrameworkCore.Tests/Evaluators/IncludeEvaluatorTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,26 @@ public void QueriesMatch_GivenIncludeExpressions()
2929
actual.Should().Be(expected);
3030
}
3131

32+
[Fact]
33+
public void QueriesMatch_GivenInheritanceModel()
34+
{
35+
var spec = new Specification<Bar>();
36+
spec.Query
37+
.Include(x => x.BarChildren)
38+
.ThenInclude<Bar, BarChild, BarDerivedInfo>(x => (x as BarDerived)!.BarDerivedInfo);
39+
40+
var actual = _evaluator
41+
.GetQuery(DbContext.Bars, spec)
42+
.ToQueryString();
43+
44+
var expected = DbContext.Bars
45+
.Include(x => x.BarChildren)
46+
.ThenInclude(x => (x as BarDerived)!.BarDerivedInfo)
47+
.ToQueryString();
48+
49+
actual.Should().Be(expected);
50+
}
51+
3252
[Fact]
3353
public void QueriesMatch_GivenThenIncludeWithVariousNavigationCollectionTypes()
3454
{
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
namespace Tests.Fixture;
2+
3+
public class Bar
4+
{
5+
public int Id { get; set; }
6+
public string? Dummy { get; set; }
7+
8+
private readonly List<BarChild> _barChildren = [];
9+
public IReadOnlyCollection<BarChild> BarChildren => _barChildren.AsReadOnly();
10+
}
11+
12+
public class BarChild
13+
{
14+
public int Id { get; set; }
15+
public string? Dummy { get; set; }
16+
17+
public int BarId { get; set; }
18+
public Bar Bar { get; set; } = default!;
19+
}
20+
21+
public class BarDerived : BarChild
22+
{
23+
public int BarDerivedInfoId { get; set; }
24+
public BarDerivedInfo BarDerivedInfo { get; set; } = default!;
25+
}
26+
27+
public class BarDerivedInfo
28+
{
29+
public int Id { get; set; }
30+
public string? Name { get; set; }
31+
}

tests/Ardalis.Specification.EntityFrameworkCore.Tests/Fixture/TestDbContext.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
public class TestDbContext(DbContextOptions options) : DbContext(options)
44
{
5+
public DbSet<Bar> Bars => Set<Bar>();
56
public DbSet<Foo> Foos => Set<Foo>();
67
public DbSet<Country> Countries => Set<Country>();
78
public DbSet<Company> Companies => Set<Company>();
@@ -23,5 +24,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
2324

2425
modelBuilder.Entity<Country>()
2526
.HasQueryFilter(x => !x.IsDeleted);
27+
28+
modelBuilder.Entity<BarDerived>()
29+
.HasBaseType<BarChild>();
2630
}
2731
}

0 commit comments

Comments
 (0)