Skip to content

Commit ec52cf7

Browse files
committed
Merge branch 'master' into merge-v5.1-into-openapi
2 parents 1ab58db + 84d01c3 commit ec52cf7

File tree

49 files changed

+146
-113
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+146
-113
lines changed

.config/dotnet-tools.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
"isRoot": true,
44
"tools": {
55
"jetbrains.resharper.globaltools": {
6-
"version": "2022.2.3",
6+
"version": "2022.2.4",
77
"commands": [
88
"jb"
99
]
1010
},
1111
"regitlint": {
12-
"version": "6.1.1",
12+
"version": "6.2.1",
1313
"commands": [
1414
"regitlint"
1515
]
@@ -21,7 +21,7 @@
2121
]
2222
},
2323
"dotnet-reportgenerator-globaltool": {
24-
"version": "5.1.3",
24+
"version": "5.1.11",
2525
"commands": [
2626
"reportgenerator"
2727
]

Build.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function RunCleanupCode {
5151

5252
if ($baseCommitHash -ne $headCommitHash) {
5353
Write-Output "Running code cleanup on commit range $baseCommitHash..$headCommitHash in pull request."
54-
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN -f commits -a $headCommitHash -b $baseCommitHash --fail-on-diff --print-diff
54+
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN -f commits -a $headCommitHash -b $baseCommitHash --fail-on-diff --print-diff
5555
CheckLastExitCode
5656
}
5757
}

Directory.Build.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</PropertyGroup>
2121

2222
<ItemGroup>
23-
<PackageReference Include="JetBrains.Annotations" Version="2022.1.0" PrivateAssets="All" />
23+
<PackageReference Include="JetBrains.Annotations" Version="2022.3.1" PrivateAssets="All" />
2424
<PackageReference Include="CSharpGuidelinesAnalyzer" Version="3.8.2" PrivateAssets="All" />
2525
<AdditionalFiles Include="$(MSBuildThisFileDirectory)CSharpGuidelinesAnalyzer.config" Visible="False" />
2626
</ItemGroup>
@@ -37,8 +37,8 @@
3737

3838
<!-- Test Project Dependencies -->
3939
<PropertyGroup>
40-
<CoverletVersion>3.1.2</CoverletVersion>
40+
<CoverletVersion>3.2.0</CoverletVersion>
4141
<MoqVersion>4.18.2</MoqVersion>
42-
<TestSdkVersion>17.3.1</TestSdkVersion>
42+
<TestSdkVersion>17.4.0</TestSdkVersion>
4343
</PropertyGroup>
4444
</Project>

appveyor.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ image:
44

55
version: '{build}'
66

7-
stack: postgresql 13.4
7+
stack: postgresql 15
88

99
environment:
1010
PGUSER: postgres
@@ -35,7 +35,10 @@ for:
3535
only:
3636
- image: Visual Studio 2022
3737
services:
38-
- postgresql13
38+
- postgresql15
39+
install:
40+
# Temporary workaround for https://help.appveyor.com/discussions/questions/60488-postgresql-version
41+
- net start postgresql-x64-15
3942
# REF: https://github.com/docascode/docfx-seed/blob/master/appveyor.yml
4043
before_build:
4144
- pwsh: |
@@ -102,7 +105,7 @@ build_script:
102105
103106
Write-Output "PostgreSQL version:"
104107
if ($IsWindows) {
105-
. "${env:ProgramFiles}\PostgreSQL\13\bin\psql" --version
108+
. "${env:ProgramFiles}\PostgreSQL\15\bin\psql" --version
106109
}
107110
else {
108111
psql --version

cleanupcode.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ if ($revision) {
2828

2929
if ($baseCommitHash -eq $headCommitHash) {
3030
Write-Output "Running code cleanup on staged/unstaged files."
31-
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN -f staged,modified
31+
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN -f staged,modified
3232
VerifySuccessExitCode
3333
}
3434
else {
3535
Write-Output "Running code cleanup on commit range $baseCommitHash..$headCommitHash, including staged/unstaged files."
36-
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN -f staged,modified,commits -a $headCommitHash -b $baseCommitHash
36+
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN -f staged,modified,commits -a $headCommitHash -b $baseCommitHash
3737
VerifySuccessExitCode
3838
}
3939
}
4040
else {
4141
Write-Output "Running code cleanup on all files."
42-
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN
42+
dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --verbosity=WARN
4343
VerifySuccessExitCode
4444
}

run-docker-postgres.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ docker run --rm --name jsonapi-dotnet-core-testing `
99
-e POSTGRES_USER=postgres `
1010
-e POSTGRES_PASSWORD=postgres `
1111
-p 5432:5432 `
12-
postgres:13.4
12+
postgres:15

src/Examples/DatabasePerTenantExample/Data/AppDbContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
3636
private string GetConnectionString()
3737
{
3838
string? tenantName = GetTenantName();
39-
string connectionString = _configuration[$"Data:{tenantName ?? "Default"}Connection"];
39+
string? connectionString = _configuration[$"Data:{tenantName ?? "Default"}Connection"];
4040

4141
if (connectionString == null)
4242
{

src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ namespace NoEntityFrameworkExample.Services;
1111
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)]
1212
public sealed class WorkItemService : IResourceService<WorkItem, int>
1313
{
14-
private readonly string _connectionString;
14+
private readonly string? _connectionString;
1515

1616
public WorkItemService(IConfiguration configuration)
1717
{
1818
string postgresPassword = Environment.GetEnvironmentVariable("PGPASSWORD") ?? "postgres";
19-
_connectionString = configuration["Data:DefaultConnection"].Replace("###", postgresPassword);
19+
_connectionString = configuration["Data:DefaultConnection"]?.Replace("###", postgresPassword);
2020
}
2121

2222
public async Task<IReadOnlyCollection<WorkItem>> GetAsync(CancellationToken cancellationToken)

src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,21 @@ public virtual void Read(string parameterName, StringValues parameterValue)
7777
}
7878
}
7979

80-
private IEnumerable<string> ExtractParameterValue(string parameterValue)
80+
private IEnumerable<string> ExtractParameterValue(string? parameterValue)
8181
{
82-
if (_options.EnableLegacyFilterNotation)
82+
if (parameterValue != null)
8383
{
84-
foreach (string condition in LegacyConverter.ExtractConditions(parameterValue))
84+
if (_options.EnableLegacyFilterNotation)
8585
{
86-
yield return condition;
86+
foreach (string condition in LegacyConverter.ExtractConditions(parameterValue))
87+
{
88+
yield return condition;
89+
}
90+
}
91+
else
92+
{
93+
yield return parameterValue;
8794
}
88-
}
89-
else
90-
{
91-
yield return parameterValue;
9295
}
9396
}
9497

src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public virtual void Read(string parameterName, StringValues parameterValue)
4848
{
4949
try
5050
{
51-
_includeExpression = GetInclude(parameterValue);
51+
_includeExpression = GetInclude(parameterValue.ToString());
5252
}
5353
catch (QueryParseException exception)
5454
{

src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public virtual void Read(string parameterName, StringValues parameterValue)
5353
{
5454
try
5555
{
56-
PaginationQueryStringValueExpression constraint = GetPageConstraint(parameterValue);
56+
PaginationQueryStringValueExpression constraint = GetPageConstraint(parameterValue.ToString());
5757

5858
if (constraint.Elements.Any(element => element.Scope == null))
5959
{

src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public virtual void Read(string parameterName, StringValues parameterValue)
6262
try
6363
{
6464
ResourceFieldChainExpression? scope = GetScope(parameterName);
65-
SortExpression sort = GetSort(parameterValue, scope);
65+
SortExpression sort = GetSort(parameterValue.ToString(), scope);
6666

6767
var expressionInScope = new ExpressionInScope(scope, sort);
6868
_constraints.Add(expressionInScope);

src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public virtual void Read(string parameterName, StringValues parameterValue)
6969
try
7070
{
7171
ResourceType targetResourceType = GetSparseFieldType(parameterName);
72-
SparseFieldSetExpression sparseFieldSet = GetSparseFieldSet(parameterValue, targetResourceType);
72+
SparseFieldSetExpression sparseFieldSet = GetSparseFieldSet(parameterValue.ToString(), targetResourceType);
7373

7474
_sparseFieldTableBuilder[targetResourceType] = sparseFieldSet;
7575
}

src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,13 @@ private void SetPaginationInTopLevelLinks(ResourceType resourceType, TopLevelLin
140140

141141
private string? CalculatePageSizeValue(PageSize? topPageSize, ResourceType resourceType)
142142
{
143-
string pageSizeParameterValue = HttpContext.Request.Query[PageSizeParameterName];
143+
string? pageSizeParameterValue = HttpContext.Request.Query[PageSizeParameterName];
144144

145145
PageSize? newTopPageSize = Equals(topPageSize, _options.DefaultPageSize) ? null : topPageSize;
146146
return ChangeTopPageSize(pageSizeParameterValue, newTopPageSize, resourceType);
147147
}
148148

149-
private string? ChangeTopPageSize(string pageSizeParameterValue, PageSize? topPageSize, ResourceType resourceType)
149+
private string? ChangeTopPageSize(string? pageSizeParameterValue, PageSize? topPageSize, ResourceType resourceType)
150150
{
151151
IImmutableList<PaginationElementQueryStringValueExpression> elements = ParsePageSizeExpression(pageSizeParameterValue, resourceType);
152152
int elementInTopScopeIndex = elements.FindIndex(expression => expression.Scope == null);

test/AnnotationTests/AnnotationTests.csproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,6 @@
44
<LangVersion>latest</LangVersion>
55
</PropertyGroup>
66

7-
<ItemGroup>
8-
<None Update="xunit.runner.json">
9-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
10-
</None>
11-
</ItemGroup>
12-
137
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.0' ">
148
<Using Remove="System.Net.Http" />
159
</ItemGroup>

test/DiscoveryTests/DiscoveryTests.csproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@
33
<TargetFramework>$(TargetFrameworkName)</TargetFramework>
44
</PropertyGroup>
55

6-
<ItemGroup>
7-
<None Update="xunit.runner.json">
8-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
9-
</None>
10-
</ItemGroup>
11-
126
<ItemGroup>
137
<ProjectReference Include="..\..\src\Examples\JsonApiDotNetCoreExample\JsonApiDotNetCoreExample.csproj" />
148
<ProjectReference Include="..\TestBuildingBlocks\TestBuildingBlocks.csproj" />

test/DiscoveryTests/xunit.runner.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,7 @@ protected override void OnModelCreating(ModelBuilder builder)
3131
builder.Entity<MusicTrack>()
3232
.HasMany(musicTrack => musicTrack.OccursIn)
3333
.WithMany(playlist => playlist.Tracks);
34+
35+
base.OnModelCreating(builder);
3436
}
3537
}

test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/MusicTrackReleaseDefinition.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ private IQueryable<MusicTrack> FilterOnRecentlyReleased(IQueryable<MusicTrack> s
3232
{
3333
IQueryable<MusicTrack> tracks = source;
3434

35-
if (bool.Parse(parameterValue))
35+
if (bool.Parse(parameterValue.ToString()))
3636
{
3737
tracks = tracks.Where(musicTrack => musicTrack.ReleasedAt < _systemClock.UtcNow && musicTrack.ReleasedAt > _systemClock.UtcNow.AddMonths(-3));
3838
}

test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations.Transactions;
1111

12-
public sealed class AtomicTransactionConsistencyTests : IClassFixture<IntegrationTestContext<TestableStartup<OperationsDbContext>, OperationsDbContext>>
12+
public sealed class AtomicTransactionConsistencyTests
13+
: IClassFixture<IntegrationTestContext<TestableStartup<OperationsDbContext>, OperationsDbContext>>, IAsyncLifetime
1314
{
1415
private readonly IntegrationTestContext<TestableStartup<OperationsDbContext>, OperationsDbContext> _testContext;
1516
private readonly OperationsFakers _fakers = new();
@@ -27,7 +28,7 @@ public AtomicTransactionConsistencyTests(IntegrationTestContext<TestableStartup<
2728
services.AddResourceRepository<LyricRepository>();
2829

2930
string postgresPassword = Environment.GetEnvironmentVariable("PGPASSWORD") ?? "postgres";
30-
string dbConnectionString = $"Host=localhost;Port=5432;Database=JsonApiTest-{Guid.NewGuid():N};User ID=postgres;Password={postgresPassword}";
31+
string dbConnectionString = $"Host=localhost;Port=5432;Database=JsonApiTest-Extra-{Guid.NewGuid():N};User ID=postgres;Password={postgresPassword}";
3132

3233
services.AddDbContext<ExtraDbContext>(options => options.UseNpgsql(dbConnectionString));
3334
});
@@ -158,4 +159,22 @@ public async Task Cannot_use_distributed_transaction()
158159
error.Source.ShouldNotBeNull();
159160
error.Source.Pointer.Should().Be("/atomic:operations[0]");
160161
}
162+
163+
public Task InitializeAsync()
164+
{
165+
return Task.CompletedTask;
166+
}
167+
168+
Task IAsyncLifetime.DisposeAsync()
169+
{
170+
return DeleteExtraDatabaseAsync();
171+
}
172+
173+
private async Task DeleteExtraDatabaseAsync()
174+
{
175+
await using AsyncServiceScope scope = _testContext.Factory.Services.CreateAsyncScope();
176+
var dbContext = scope.ServiceProvider.GetRequiredService<ExtraDbContext>();
177+
178+
await dbContext.Database.EnsureDeletedAsync();
179+
}
161180
}

test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,7 @@ protected override void OnModelCreating(ModelBuilder builder)
3939
builder.Entity<Car>()
4040
.HasMany(car => car.PreviousDealerships)
4141
.WithMany(dealership => dealership.SoldCars);
42+
43+
base.OnModelCreating(builder);
4244
}
4345
}

test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,7 @@ protected override void OnModelCreating(ModelBuilder builder)
3434
.HasOne(building => building.SecondaryDoor)
3535
.WithOne()
3636
.HasForeignKey<Building>("SecondaryDoorId");
37+
38+
base.OnModelCreating(builder);
3739
}
3840
}

test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,7 @@ protected override void OnModelCreating(ModelBuilder builder)
3737
builder.Entity<SystemDirectory>()
3838
.HasOne(systemDirectory => systemDirectory.AlsoSelf)
3939
.WithOne();
40+
41+
base.OnModelCreating(builder);
4042
}
4143
}

test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,7 @@ protected override void OnModelCreating(ModelBuilder builder)
2424
.HasOne(photo => photo.Location)
2525
.WithOne(location => location.Photo)
2626
.HasForeignKey<Photo>("LocationId");
27+
28+
base.OnModelCreating(builder);
2729
}
2830
}

test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,7 @@ protected override void OnModelCreating(ModelBuilder builder)
3131

3232
builder.Entity<WebProduct>()
3333
.HasQueryFilter(webProduct => webProduct.Shop.TenantId == _tenantProvider.TenantId);
34+
35+
base.OnModelCreating(builder);
3436
}
3537
}

test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,7 @@ protected override void OnModelCreating(ModelBuilder builder)
2121
builder.Entity<FilterableResource>()
2222
.Property(resource => resource.SomeDateTimeInLocalZone)
2323
.HasColumnType("timestamp without time zone");
24+
25+
base.OnModelCreating(builder);
2426
}
2527
}

test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,7 @@ protected override void OnModelCreating(ModelBuilder builder)
3737
.HasOne(man => man.Wife)
3838
.WithOne(woman => woman.Husband)
3939
.HasForeignKey<Man>();
40+
41+
base.OnModelCreating(builder);
4042
}
4143
}

test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,7 @@ protected override void OnModelCreating(ModelBuilder builder)
4949
left => left
5050
.HasOne(joinEntity => joinEntity.ToItem)
5151
.WithMany());
52+
53+
base.OnModelCreating(builder);
5254
}
5355
}

test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ protected override void OnModelCreating(ModelBuilder builder)
3333
.HasOne(order => order.Shipment)
3434
.WithOne(shipment => shipment.Order)
3535
.HasForeignKey<Shipment>("OrderId");
36+
37+
base.OnModelCreating(builder);
3638
}
3739
}

test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonDefinition.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public override QueryStringParameterHandlers<Moon> OnRegisterQueryableHandlersFo
5151

5252
private static IQueryable<Moon> FilterByRadius(IQueryable<Moon> source, StringValues parameterValue)
5353
{
54-
bool isFilterOnLargerThan = bool.Parse(parameterValue);
54+
bool isFilterOnLargerThan = bool.Parse(parameterValue.ToString());
5555
return isFilterOnLargerThan ? source.Where(moon => moon.SolarRadius > 1m) : source.Where(moon => moon.SolarRadius <= 1m);
5656
}
5757
}

test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@ protected override void OnModelCreating(ModelBuilder builder)
2222
builder.Entity<Scholarship>()
2323
.HasMany(scholarship => scholarship.Participants)
2424
.WithOne(student => student.Scholarship!);
25+
26+
base.OnModelCreating(builder);
2527
}
2628
}

0 commit comments

Comments
 (0)