Skip to content

Commit ad36be4

Browse files
authored
feat : upgrade to .NET 9 (#1061)
* update nuget and deps to 9.0 * update infra * update to .net 9 * update docs * fix issue
1 parent df50461 commit ad36be4

File tree

33 files changed

+128
-126
lines changed

33 files changed

+128
-126
lines changed

.github/workflows/blazor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
- name: setup dotnet
2828
uses: actions/setup-dotnet@v4
2929
with:
30-
dotnet-version: 8.0.108
30+
dotnet-version: 9.x
3131
- name: restore dependencies
3232
run: dotnet restore ./src/apps/blazor/client/Client.csproj
3333
- name: build

.github/workflows/webapi.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- name: setup dotnet
2626
uses: actions/setup-dotnet@v4
2727
with:
28-
dotnet-version: 8.0.108
28+
dotnet-version: 9.x
2929
- name: restore dependencies
3030
run: dotnet restore ./src/api/server/Server.csproj
3131
- name: build

.template.config/template.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
},
1717
"identity": "FullStackHero.NET.StarterKit",
1818
"name": "FullStackHero .NET Starter Kit",
19-
"description": "The best way to start a full-stack .NET 8 Web App.",
19+
"description": "The best way to start a full-stack .NET 9 Web App.",
2020
"shortName": "fsh",
2121
"sourceName": "FSH.Starter",
2222
"preferNameDirectory": true,

FSH.StarterKit.nuspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
<metadata>
44
<id>FullStackHero.NET.StarterKit</id>
55
<title>FullStackHero .NET Starter Kit</title>
6-
<version>2.0.2-rc</version>
6+
<version>2.0.3-rc</version>
77
<authors>Mukesh Murugan</authors>
8-
<description>The best way to start a full-stack Multi-tenant .NET 8 Web App.</description>
8+
<description>The best way to start a full-stack Multi-tenant .NET 9 Web App.</description>
99
<language>en-US</language>
1010
<license type="file">./content/LICENSE</license>
1111
<copyright>2024</copyright>

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# FullStackHero .NET 8 Starter Kit 🚀
1+
# FullStackHero .NET 9 Starter Kit 🚀
22

33
> With ASP.NET Core Web API & Blazor Client
44
5-
FullStackHero .NET Starter Kit is a starting point for your next `.NET 8 Clean Architecture` Solution that incorporates the most essential packages and features your projects will ever need including out-of-the-box Multi-Tenancy support. This project can save well over 200+ hours of development time for your team.
5+
FullStackHero .NET Starter Kit is a starting point for your next `.NET 9 Clean Architecture` Solution that incorporates the most essential packages and features your projects will ever need including out-of-the-box Multi-Tenancy support. This project can save well over 200+ hours of development time for your team.
66

77
![FullStackHero .NET Starter Kit](./assets/fullstackhero-dotnet-starter-kit.png)
88

@@ -16,7 +16,7 @@ As the project is still in beta, the NuGet packages are not yet available. You c
1616

1717
Prerequisites:
1818

19-
- .NET 8 SDK installed.
19+
- .NET 9 SDK installed.
2020
- Visual Studio IDE.
2121
- Docker Desktop.
2222
- PostgreSQL instance running on your machine or docker container.
@@ -38,8 +38,8 @@ Please follow the below instructions.
3838

3939
# ✨ Technologies
4040

41-
- ASP.NET Core 8
42-
- Entity Framework Core 8
41+
- .NET 9
42+
- Entity Framework Core 9
4343
- Blazor
4444
- MediatR
4545
- PostgreSQL
-17.6 KB
Loading

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<TargetFramework>net8.0</TargetFramework>
3+
<TargetFramework>net9.0</TargetFramework>
44
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
55
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
66
<GenerateDocumentationFile>true</GenerateDocumentationFile>

src/Directory.Packages.props

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,60 +13,61 @@
1313
<PackageVersion Include="Ardalis.Specification.EntityFrameworkCore" Version="8.0.0" />
1414
<PackageVersion Include="Asp.Versioning.Http" Version="8.1.0" />
1515
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
16-
<PackageVersion Include="Finbuckle.MultiTenant" Version="7.0.2" />
17-
<PackageVersion Include="Finbuckle.MultiTenant.AspNetCore" Version="7.0.2" />
18-
<PackageVersion Include="Finbuckle.MultiTenant.EntityFrameworkCore" Version="7.0.2" />
19-
<PackageVersion Include="Hangfire" Version="1.8.14" />
16+
<PackageVersion Include="Finbuckle.MultiTenant" Version="9.0.0" />
17+
<PackageVersion Include="Finbuckle.MultiTenant.AspNetCore" Version="9.0.0" />
18+
<PackageVersion Include="Finbuckle.MultiTenant.EntityFrameworkCore" Version="9.0.0" />
19+
<PackageVersion Include="Hangfire" Version="1.8.15" />
2020
<PackageVersion Include="Hangfire.MemoryStorage" Version="1.8.1.1" />
21-
<PackageVersion Include="Hangfire.PostgreSql" Version="1.20.9" />
22-
<PackageVersion Include="MailKit" Version="4.7.1.1" />
23-
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.8" />
24-
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.0" />
25-
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="8.0.8" />
26-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8" />
27-
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.8" />
28-
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.8" />
29-
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="8.0.8" />
21+
<PackageVersion Include="Hangfire.PostgreSql" Version="1.20.10" />
22+
<PackageVersion Include="MailKit" Version="4.8.0" />
23+
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.0" />
24+
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="9.0.0" />
25+
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="9.0.0" />
26+
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="4.11.0" />
27+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0" />
28+
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
29+
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.0" />
30+
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="9.0.0" />
3031
<PackageVersion Include="Microsoft.NET.Build.Containers" Version="8.0.100" />
3132
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
32-
<PackageVersion Include="MimeKit" Version="4.7.1" />
33-
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
34-
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.9.0" />
33+
<PackageVersion Include="MimeKit" Version="4.8.0" />
34+
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.1" />
35+
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.10.0" />
3536
<PackageVersion Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.0.0-beta.12" />
3637
<PackageVersion Include="OpenTelemetry.Instrumentation.Process" Version="0.5.0-beta.6" />
3738
<PackageVersion Include="Serilog.Expressions" Version="5.0.0" />
38-
<PackageVersion Include="Serilog.Sinks.OpenTelemetry" Version="4.0.0" />
39-
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.7.2" />
40-
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
39+
<PackageVersion Include="Serilog.Sinks.OpenTelemetry" Version="4.1.1" />
40+
<PackageVersion Include="Swashbuckle.AspNetCore" Version="7.0.0" />
41+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.0" />
4142
<PackageVersion Include="Swashbuckle.AspNetCore.ReDoc" Version="6.5.0" />
42-
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.7.0" />
43-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" />
44-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.7.0" />
43+
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.11.0" />
44+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.11.0" />
45+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.11.0" />
4546
</ItemGroup>
4647
<ItemGroup>
4748
<PackageVersion Include="Mapster" Version="7.4.0" />
48-
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.8" />
49-
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.8" />
49+
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.0" />
50+
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="9.0.0" />
5051
</ItemGroup>
5152
<ItemGroup>
5253
<PackageVersion Include="SonarAnalyzer.CSharp" Version="9.32.0.97167" />
5354
</ItemGroup>
5455
<ItemGroup>
55-
<PackageVersion Include="MediatR" Version="12.4.0" />
56-
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="11.9.2" />
57-
<PackageVersion Include="Carter" Version="8.2.1" />
56+
<PackageVersion Include="MediatR" Version="12.4.1" />
57+
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="11.11.0" />
58+
<PackageVersion Include="Carter" Version="9.0.0" />
5859
</ItemGroup>
5960
<ItemGroup>
60-
<PackageVersion Include="Serilog" Version="4.0.1" />
61-
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.2" />
61+
<PackageVersion Include="Serilog" Version="4.1.0" />
62+
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.3" />
6263
<PackageVersion Include="Serilog.Enrichers.CorrelationId" Version="3.0.1" />
6364
<PackageVersion Include="Serilog.Enrichers.Environment" Version="3.0.1" />
6465
<PackageVersion Include="Serilog.Enrichers.Span" Version="3.1.0" />
6566
<PackageVersion Include="Serilog.Exceptions" Version="8.4.0" />
6667
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
6768
<PackageVersion Include="Serilog.Sinks.Elasticsearch" Version="10.0.0" />
6869
<PackageVersion Include="Serilog.Formatting.Elasticsearch" Version="10.0.0" />
69-
<PackageVersion Include="Serilog.Sinks.Async" Version="2.0.0" />
70+
<PackageVersion Include="Serilog.Sinks.Async" Version="2.1.0" />
7071
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
7172
<PackageVersion Include="Serilog.Sinks.File" Version="6.0.0" />
7273
<PackageVersion Include="Serilog.Sinks.Seq" Version="8.0.0" />
@@ -77,12 +78,13 @@
7778
<PackageVersion Include="Serilog.Sinks.Debug" Version="3.0.0" />
7879
</ItemGroup>
7980
<ItemGroup Label="Aspire">
80-
<PackageVersion Include="Aspire.Hosting.AppHost" Version="8.1.0" />
81-
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="8.8.0" />
82-
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="8.1.0" />
83-
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
81+
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.0.0" />
82+
<PackageVersion Include="Aspire.AppHost.Sdk" Version="9.0.0" />
83+
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.0.0" />
84+
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="9.0.0" />
85+
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.10.0" />
8486
<PackageVersion Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.9.0-beta.2" />
85-
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
87+
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.10.0" />
8688
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.9.0" />
8789
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
8890
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.9.0" />

src/Dockerfile.Blazor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
1+
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build-env
22
WORKDIR /app
33

44
COPY . ./

src/Shared/Authorization/AppConstants.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
namespace FSH.Starter.Shared.Authorization;
44
public static class AppConstants
55
{
6-
public static readonly Collection<string> SupportedImageFormats = new()
7-
{
6+
public static readonly Collection<string> SupportedImageFormats =
7+
[
88
".jpeg",
99
".jpg",
1010
".png"
11-
};
11+
];
1212
public static readonly string StandardImageFormat = "image/jpeg";
1313
public static readonly int MaxImageWidth = 1500;
1414
public static readonly int MaxImageHeight = 1500;

src/Shared/Authorization/FshPermissions.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace FSH.Starter.Shared.Authorization;
44

55
public static class FshPermissions
66
{
7-
private static readonly FshPermission[] allPermissions =
8-
{
7+
private static readonly FshPermission[] AllPermissions =
8+
[
99
//tenants
1010
new("View Tenants", FshActions.View, FshResources.Tenants, IsRoot: true),
1111
new("Create Tenants", FshActions.Create, FshResources.Tenants, IsRoot: true),
@@ -57,12 +57,12 @@ public static class FshPermissions
5757

5858
//audit
5959
new("View Audit Trails", FshActions.View, FshResources.AuditTrails),
60-
};
60+
];
6161

62-
public static IReadOnlyList<FshPermission> All { get; } = new ReadOnlyCollection<FshPermission>(allPermissions);
63-
public static IReadOnlyList<FshPermission> Root { get; } = new ReadOnlyCollection<FshPermission>(allPermissions.Where(p => p.IsRoot).ToArray());
64-
public static IReadOnlyList<FshPermission> Admin { get; } = new ReadOnlyCollection<FshPermission>(allPermissions.Where(p => !p.IsRoot).ToArray());
65-
public static IReadOnlyList<FshPermission> Basic { get; } = new ReadOnlyCollection<FshPermission>(allPermissions.Where(p => p.IsBasic).ToArray());
62+
public static IReadOnlyList<FshPermission> All { get; } = new ReadOnlyCollection<FshPermission>(AllPermissions);
63+
public static IReadOnlyList<FshPermission> Root { get; } = new ReadOnlyCollection<FshPermission>(AllPermissions.Where(p => p.IsRoot).ToArray());
64+
public static IReadOnlyList<FshPermission> Admin { get; } = new ReadOnlyCollection<FshPermission>(AllPermissions.Where(p => !p.IsRoot).ToArray());
65+
public static IReadOnlyList<FshPermission> Basic { get; } = new ReadOnlyCollection<FshPermission>(AllPermissions.Where(p => p.IsBasic).ToArray());
6666
}
6767

6868
public record FshPermission(string Description, string Action, string Resource, bool IsBasic = false, bool IsRoot = false)

src/Shared/Shared.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
</PropertyGroup>

src/api/framework/Core/Audit/TrailDto.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ public class TrailDto()
77
public Guid Id { get; set; }
88
public DateTimeOffset DateTime { get; set; }
99
public Guid UserId { get; set; }
10-
public Dictionary<string, object?> KeyValues { get; } = new();
11-
public Dictionary<string, object?> OldValues { get; } = new();
12-
public Dictionary<string, object?> NewValues { get; } = new();
13-
public Collection<string> ModifiedProperties { get; } = new();
10+
public Dictionary<string, object?> KeyValues { get; } = [];
11+
public Dictionary<string, object?> OldValues { get; } = [];
12+
public Dictionary<string, object?> NewValues { get; } = [];
13+
public Collection<string> ModifiedProperties { get; } = [];
1414
public TrailType Type { get; set; }
1515
public string? TableName { get; set; }
1616

17-
private static readonly JsonSerializerOptions serializerOptions = new()
17+
private static readonly JsonSerializerOptions SerializerOptions = new()
1818
{
1919
WriteIndented = false,
2020
};
@@ -28,10 +28,10 @@ public AuditTrail ToAuditTrail()
2828
Operation = Type.ToString(),
2929
Entity = TableName,
3030
DateTime = DateTime,
31-
PrimaryKey = JsonSerializer.Serialize(KeyValues, serializerOptions),
32-
PreviousValues = OldValues.Count == 0 ? null : JsonSerializer.Serialize(OldValues, serializerOptions),
33-
NewValues = NewValues.Count == 0 ? null : JsonSerializer.Serialize(NewValues, serializerOptions),
34-
ModifiedProperties = ModifiedProperties.Count == 0 ? null : JsonSerializer.Serialize(ModifiedProperties, serializerOptions)
31+
PrimaryKey = JsonSerializer.Serialize(KeyValues, SerializerOptions),
32+
PreviousValues = OldValues.Count == 0 ? null : JsonSerializer.Serialize(OldValues, SerializerOptions),
33+
NewValues = NewValues.Count == 0 ? null : JsonSerializer.Serialize(NewValues, SerializerOptions),
34+
ModifiedProperties = ModifiedProperties.Count == 0 ? null : JsonSerializer.Serialize(ModifiedProperties, SerializerOptions)
3535
};
3636
}
3737
}

src/api/framework/Core/Auth/Jwt/JwtOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public IEnumerable<ValidationResult> Validate(ValidationContext validationContex
1313
{
1414
if (string.IsNullOrEmpty(Key))
1515
{
16-
yield return new ValidationResult("No Key defined in JwtSettings config", new[] { nameof(Key) });
16+
yield return new ValidationResult("No Key defined in JwtSettings config", [nameof(Key)]);
1717
}
1818
}
1919
}
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
using System.Collections.ObjectModel;
2-
using System.Net;
1+
using System.Net;
32

43
namespace FSH.Framework.Core.Exceptions;
54
public class ForbiddenException : FshException
65
{
76
public ForbiddenException()
8-
: base("unauthorized", new Collection<string>(), HttpStatusCode.Forbidden)
7+
: base("unauthorized", [], HttpStatusCode.Forbidden)
98
{
109
}
1110
public ForbiddenException(string message)
12-
: base(message, new Collection<string>(), HttpStatusCode.Forbidden)
11+
: base(message, [], HttpStatusCode.Forbidden)
1312
{
1413
}
1514
}

src/api/framework/Infrastructure/SecurityHeaders/Extensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ internal static IServiceCollection ConfigureSecurityHeaders(this IServiceCollect
1313

1414
return services;
1515
}
16-
16+
1717
internal static IApplicationBuilder UseSecurityHeaders(this IApplicationBuilder app)
1818
{
1919
var options = app.ApplicationServices.GetRequiredService<IOptions<SecurityHeaderOptions>>().Value;
20-
20+
2121
if (options.Enable)
2222
{
2323
app.Use(async (context, next) =>
@@ -48,22 +48,22 @@ internal static IApplicationBuilder UseSecurityHeaders(this IApplicationBuilder
4848
{
4949
context.Response.Headers.XXSSProtection = options.Headers.XXSSProtection;
5050
}
51-
51+
5252
if (!string.IsNullOrWhiteSpace(options.Headers.ContentSecurityPolicy))
5353
{
5454
context.Response.Headers.ContentSecurityPolicy = options.Headers.ContentSecurityPolicy;
5555
}
56-
56+
5757
if (!string.IsNullOrWhiteSpace(options.Headers.StrictTransportSecurity))
5858
{
5959
context.Response.Headers.StrictTransportSecurity = options.Headers.StrictTransportSecurity;
6060
}
6161
}
62-
62+
6363
await next.Invoke();
6464
});
6565
}
66-
66+
6767
return app;
6868
}
6969
}

src/api/framework/Infrastructure/Tenant/Extensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ public static IServiceCollection ConfigureMultitenancy(this IServiceCollection s
2727
{
2828
// to save database calls to resolve tenant
2929
// this was happening for every request earlier, leading to ineffeciency
30-
config.Events.OnTenantResolved = async (context) =>
30+
config.Events.OnTenantResolveCompleted = async (context) =>
3131
{
32-
if (context.StoreType != typeof(DistributedCacheStore<FshTenantInfo>))
32+
if (context.MultiTenantContext.StoreInfo!.StoreType != typeof(DistributedCacheStore<FshTenantInfo>))
3333
{
3434
var sp = ((HttpContext)context.Context!).RequestServices;
3535
var distributedCacheStore = sp
3636
.GetService<IEnumerable<IMultiTenantStore<FshTenantInfo>>>()!
3737
.FirstOrDefault(s => s.GetType() == typeof(DistributedCacheStore<FshTenantInfo>));
3838

39-
await distributedCacheStore!.TryAddAsync((FshTenantInfo)context.TenantInfo!);
39+
await distributedCacheStore!.TryAddAsync(context.MultiTenantContext.TenantInfo!);
4040
}
4141
await Task.FromResult(0);
4242
};

src/api/migrations/PostgreSQL/Identity/20240601095842_Add Identity Schema.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ protected override void Up(MigrationBuilder migrationBuilder)
199199
name: "RoleNameIndex",
200200
schema: "identity",
201201
table: "Roles",
202-
columns: new[] { "NormalizedName", "TenantId" },
202+
columns: ["NormalizedName", "TenantId"],
203203
unique: true);
204204

205205
migrationBuilder.CreateIndex(

0 commit comments

Comments
 (0)