Skip to content

Commit 78dbfc6

Browse files
committed
fix: resolve WebHost runtime exceptions
- Fix DI scope mismatch: remove AddConfiguredDbContext from AddPersistenceModule, keep only AddConfiguredDbContextFactory (which registers DbContext as Scoped automatically) - Fix AddConfiguredDbContextFactory to register DbContext type for migration tracking - Always run DatabaseMigrationHostedService (not just in Development) - Remove unused IHostEnvironment dependency from DatabaseMigrationHostedService - Suppress PendingModelChangesWarning in DbContextOptionsFactory - Regenerate Identity migration to include PasswordHash column - Add .gitignore rules for SQLite database files 412 tests passing, 0 errors, 0 warnings
1 parent dc74943 commit 78dbfc6

226 files changed

Lines changed: 9614 additions & 4940 deletions

File tree

Some content is hidden

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

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,8 @@ dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning
4848
dotnet_style_readonly_field_modifier = true:suggestion
4949
dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
5050

51+
[**/Migrations/*.cs]
52+
generated_code = true
53+
5154
[*.md]
5255
trim_trailing_whitespace = false

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ ipch/
130130
*.VC.db
131131
*.VC.VC.opendb
132132

133+
# SQLite databases
134+
*.db
135+
*.db-shm
136+
*.db-wal
137+
133138
# Visual Studio profiler
134139
*.psess
135140
*.vsp

ChengYuan.slnx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,25 @@
88
<Project Path="src/Framework/Auditing/ChengYuan.Auditing/ChengYuan.Auditing.csproj" />
99
<Project Path="src/Framework/Authorization/ChengYuan.Authorization/ChengYuan.Authorization.csproj" />
1010
<Project Path="src/Framework/BackgroundJobs/ChengYuan.BackgroundJobs/ChengYuan.BackgroundJobs.csproj" />
11+
<Project Path="src/Framework/BackgroundJobs/ChengYuan.BackgroundJobs.Persistence/ChengYuan.BackgroundJobs.Persistence.csproj" />
1112
<Project Path="src/Framework/BackgroundWorkers/ChengYuan.BackgroundWorkers/ChengYuan.BackgroundWorkers.csproj" />
1213
<Project Path="src/Framework/BlobStoring/ChengYuan.BlobStoring/ChengYuan.BlobStoring.csproj" />
1314
<Project Path="src/Framework/Caching/ChengYuan.Caching/ChengYuan.Caching.csproj" />
1415
<Project Path="src/Framework/Caching/ChengYuan.Caching.Memory/ChengYuan.Caching.Memory.csproj" />
1516
<Project Path="src/Framework/Caching/ChengYuan.Caching.StackExchangeRedis/ChengYuan.Caching.StackExchangeRedis.csproj" />
1617
<Project Path="src/Framework/DistributedLocking/ChengYuan.DistributedLocking/ChengYuan.DistributedLocking.csproj" />
18+
<Project Path="src/Framework/DistributedLocking/ChengYuan.DistributedLocking.Redis/ChengYuan.DistributedLocking.Redis.csproj" />
1719
<Project Path="src/Framework/Emailing/ChengYuan.Emailing/ChengYuan.Emailing.csproj" />
1820
<Project Path="src/Framework/EventBus/ChengYuan.EventBus/ChengYuan.EventBus.csproj" />
21+
<Project Path="src/Framework/EventBus/ChengYuan.EventBus.Outbox/ChengYuan.EventBus.Outbox.csproj" />
1922
<Project Path="src/Framework/ExceptionHandling/ChengYuan.ExceptionHandling/ChengYuan.ExceptionHandling.csproj" />
2023
<Project Path="src/Framework/ExecutionContext/ChengYuan.ExecutionContext/ChengYuan.ExecutionContext.csproj" />
2124
<Project Path="src/Framework/Features/ChengYuan.Features/ChengYuan.Features.csproj" />
2225
<Project Path="src/Framework/Interceptors/ChengYuan.Interceptors/ChengYuan.Interceptors.csproj" />
2326
<Project Path="src/Framework/MultiTenancy/ChengYuan.MultiTenancy/ChengYuan.MultiTenancy.csproj" />
2427
<Project Path="src/Framework/Notifications/ChengYuan.Notifications/ChengYuan.Notifications.csproj" />
2528
<Project Path="src/Framework/ObjectMapping/ChengYuan.ObjectMapping/ChengYuan.ObjectMapping.csproj" />
29+
<Project Path="src/Framework/ObjectMapping/ChengYuan.ObjectMapping.Mapster/ChengYuan.ObjectMapping.Mapster.csproj" />
2630
<Project Path="src/Framework/Outbox/ChengYuan.Outbox/ChengYuan.Outbox.csproj" />
2731
<Project Path="src/Framework/Outbox/ChengYuan.Outbox.Persistence/ChengYuan.Outbox.Persistence.csproj" />
2832
<Project Path="src/Framework/Outbox/ChengYuan.Outbox.Worker/ChengYuan.Outbox.Worker.csproj" />
@@ -33,6 +37,7 @@
3337
<Project Path="src/Framework/AspNetCore/ChengYuan.AspNetCore/ChengYuan.AspNetCore.csproj" />
3438
<Project Path="src/Framework/AspNetCore/ChengYuan.HealthChecks/ChengYuan.HealthChecks.csproj" />
3539
<Project Path="src/Framework/HttpResilience/ChengYuan.HttpResilience/ChengYuan.HttpResilience.csproj" />
40+
<Project Path="src/Framework/Application/ChengYuan.Application/ChengYuan.Application.csproj" />
3641
</Folder>
3742
<Folder Name="/src/Applications/">
3843
<Project Path="src/Applications/AuditLogging/ChengYuan.AuditLogging.Contracts/ChengYuan.AuditLogging.Contracts.csproj" />

Directory.Packages.props

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,32 @@
77
<!-- Build tooling -->
88
<PackageVersion Include="Nuke.Common" Version="10.1.0" />
99
<!-- Runtime dependencies -->
10-
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.0" />
11-
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.0" />
12-
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.0" />
13-
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0" />
14-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
15-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0" />
16-
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="10.0.0" />
17-
<PackageVersion Include="Microsoft.Extensions.FileProviders.Abstractions" Version="10.0.0" />
18-
<PackageVersion Include="Microsoft.Extensions.FileProviders.Composite" Version="10.0.0" />
19-
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.0" />
20-
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0" />
21-
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.0" />
22-
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.0.0" />
10+
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.5" />
11+
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.5" />
12+
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.5" />
13+
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
14+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.5" />
15+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.5" />
16+
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="10.0.5" />
17+
<PackageVersion Include="Microsoft.Extensions.FileProviders.Abstractions" Version="10.0.5" />
18+
<PackageVersion Include="Microsoft.Extensions.FileProviders.Composite" Version="10.0.5" />
19+
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.5" />
20+
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.5" />
21+
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.5" />
22+
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.1.0" />
2323
<PackageVersion Include="Cronos" Version="0.8.4" />
24-
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
25-
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.0" />
26-
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.0" />
27-
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0" />
28-
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.0" />
29-
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.0" />
30-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.0" />
31-
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.0" />
32-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.0" />
24+
<PackageVersion Include="BCrypt.Net-Next" Version="4.0.3" />
25+
<PackageVersion Include="Mapster" Version="10.0.7" />
26+
<PackageVersion Include="StackExchange.Redis" Version="2.8.41" />
27+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.5" />
28+
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.5" />
29+
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.5" />
30+
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.5" />
31+
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.5" />
32+
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.5" />
33+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.5" />
34+
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.5" />
35+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.5" />
3336
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.0" />
3437
<PackageVersion Include="Serilog.AspNetCore" Version="9.0.0" />
3538
<!-- API versioning -->

src/Applications/AuditLogging/ChengYuan.AuditLogging.Application/Sinks/AuditLogStoreSink.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Linq;
34
using System.Threading;
45
using System.Threading.Tasks;
56
using ChengYuan.Auditing;
7+
using ChengYuan.Core.Data.Auditing;
68

79
namespace ChengYuan.AuditLogging;
810

@@ -24,7 +26,8 @@ public ValueTask WriteAsync(AuditLogEntry entry, CancellationToken cancellationT
2426
entry.CorrelationId,
2527
entry.Succeeded,
2628
entry.ErrorMessage,
27-
new Dictionary<string, object?>(entry.Properties, StringComparer.Ordinal));
29+
new Dictionary<string, object?>(entry.Properties, StringComparer.Ordinal),
30+
entry.EntityChanges.ToList<EntityChangeInfo>());
2831

2932
return store.AppendAsync(record, cancellationToken);
3033
}

src/Applications/AuditLogging/ChengYuan.AuditLogging.Application/packages.lock.json

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
"net10.0": {
55
"Microsoft.Extensions.Primitives": {
66
"type": "Transitive",
7-
"resolved": "10.0.0",
8-
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
7+
"resolved": "10.0.5",
8+
"contentHash": "/HUHJ0tw/LQvD0DZrz50eQy/3z7PfX7WWEaXnjKTV9/TNdcgFlNTZGo49QhS7PTmhDqMyHRMqAXSBxLh0vso4g=="
99
},
1010
"chengyuan.auditing": {
1111
"type": "Project",
@@ -16,15 +16,18 @@
1616
}
1717
},
1818
"chengyuan.auditlogging.contracts": {
19-
"type": "Project"
19+
"type": "Project",
20+
"dependencies": {
21+
"ChengYuan.Core": "[0.2.10-local, )"
22+
}
2023
},
2124
"chengyuan.core": {
2225
"type": "Project",
2326
"dependencies": {
24-
"Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )",
25-
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.0, )",
26-
"Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )",
27-
"Microsoft.Extensions.Options": "[10.0.0, )"
27+
"Microsoft.Extensions.Configuration.Abstractions": "[10.0.5, )",
28+
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
29+
"Microsoft.Extensions.Logging.Abstractions": "[10.0.5, )",
30+
"Microsoft.Extensions.Options": "[10.0.5, )"
2831
}
2932
},
3033
"chengyuan.executioncontext": {
@@ -42,36 +45,36 @@
4245
},
4346
"Microsoft.Extensions.Configuration.Abstractions": {
4447
"type": "CentralTransitive",
45-
"requested": "[10.0.0, )",
46-
"resolved": "10.0.0",
47-
"contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==",
48+
"requested": "[10.0.5, )",
49+
"resolved": "10.0.5",
50+
"contentHash": "P09QpTHjqHmCLQOTC+WyLkoRNxek4NIvfWt+TnU0etoDUSRxcltyd6+j/ouRbMdLR0j44GqGO+lhI2M4fAHG4g==",
4851
"dependencies": {
49-
"Microsoft.Extensions.Primitives": "10.0.0"
52+
"Microsoft.Extensions.Primitives": "10.0.5"
5053
}
5154
},
5255
"Microsoft.Extensions.DependencyInjection.Abstractions": {
5356
"type": "CentralTransitive",
54-
"requested": "[10.0.0, )",
55-
"resolved": "10.0.0",
56-
"contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
57+
"requested": "[10.0.5, )",
58+
"resolved": "10.0.5",
59+
"contentHash": "iVMtq9eRvzyhx8949EGT0OCYJfXi737SbRVzWXE5GrOgGj5AaZ9eUuxA/BSUfmOMALKn/g8KfFaNQw0eiB3lyA=="
5760
},
5861
"Microsoft.Extensions.Logging.Abstractions": {
5962
"type": "CentralTransitive",
60-
"requested": "[10.0.0, )",
61-
"resolved": "10.0.0",
62-
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
63+
"requested": "[10.0.5, )",
64+
"resolved": "10.0.5",
65+
"contentHash": "9HOdqlDtPptVcmKAjsQ/Nr5Rxfq6FMYLdhvZh1lVmeKR738qeYecQD7+ldooXf+u2KzzR1kafSphWngIM3C6ug==",
6366
"dependencies": {
64-
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
67+
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.5"
6568
}
6669
},
6770
"Microsoft.Extensions.Options": {
6871
"type": "CentralTransitive",
69-
"requested": "[10.0.0, )",
70-
"resolved": "10.0.0",
71-
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
72+
"requested": "[10.0.5, )",
73+
"resolved": "10.0.5",
74+
"contentHash": "MDaQMdUplw0AIRhWWmbLA7yQEXaLIHb+9CTroTiNS8OlI0LMXS4LCxtopqauiqGCWlRgJ+xyraVD8t6veRAFbw==",
7275
"dependencies": {
73-
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
74-
"Microsoft.Extensions.Primitives": "10.0.0"
76+
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.5",
77+
"Microsoft.Extensions.Primitives": "10.0.5"
7578
}
7679
}
7780
}

src/Applications/AuditLogging/ChengYuan.AuditLogging.Contracts/AuditLogRecord.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using ChengYuan.Core.Data.Auditing;
34

45
namespace ChengYuan.AuditLogging;
56

@@ -17,10 +18,12 @@ public AuditLogRecord(
1718
string? correlationId,
1819
bool succeeded,
1920
string? errorMessage,
20-
IReadOnlyDictionary<string, object?> properties)
21+
IReadOnlyDictionary<string, object?> properties,
22+
IReadOnlyList<EntityChangeInfo> entityChanges)
2123
{
2224
ArgumentException.ThrowIfNullOrWhiteSpace(name);
2325
ArgumentNullException.ThrowIfNull(properties);
26+
ArgumentNullException.ThrowIfNull(entityChanges);
2427

2528
Name = name;
2629
StartedAtUtc = startedAtUtc;
@@ -34,6 +37,7 @@ public AuditLogRecord(
3437
Succeeded = succeeded;
3538
ErrorMessage = errorMessage;
3639
Properties = properties;
40+
EntityChanges = entityChanges;
3741
}
3842

3943
public string Name { get; }
@@ -60,6 +64,8 @@ public AuditLogRecord(
6064

6165
public IReadOnlyDictionary<string, object?> Properties { get; }
6266

67+
public IReadOnlyList<EntityChangeInfo> EntityChanges { get; }
68+
6369
public bool TryGetProperty(string name, out object? value)
6470
{
6571
ArgumentException.ThrowIfNullOrWhiteSpace(name);

src/Applications/AuditLogging/ChengYuan.AuditLogging.Contracts/ChengYuan.AuditLogging.Contracts.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44
<IsPackable>false</IsPackable>
55
</PropertyGroup>
66

7+
<ItemGroup>
8+
<ProjectReference Include="..\..\..\Framework\Core\ChengYuan.Core.csproj" />
9+
</ItemGroup>
10+
711
</Project>
Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,55 @@
11
{
22
"version": 2,
33
"dependencies": {
4-
"net10.0": {}
4+
"net10.0": {
5+
"Microsoft.Extensions.Primitives": {
6+
"type": "Transitive",
7+
"resolved": "10.0.5",
8+
"contentHash": "/HUHJ0tw/LQvD0DZrz50eQy/3z7PfX7WWEaXnjKTV9/TNdcgFlNTZGo49QhS7PTmhDqMyHRMqAXSBxLh0vso4g=="
9+
},
10+
"chengyuan.core": {
11+
"type": "Project",
12+
"dependencies": {
13+
"Microsoft.Extensions.Configuration.Abstractions": "[10.0.5, )",
14+
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.5, )",
15+
"Microsoft.Extensions.Logging.Abstractions": "[10.0.5, )",
16+
"Microsoft.Extensions.Options": "[10.0.5, )"
17+
}
18+
},
19+
"Microsoft.Extensions.Configuration.Abstractions": {
20+
"type": "CentralTransitive",
21+
"requested": "[10.0.5, )",
22+
"resolved": "10.0.5",
23+
"contentHash": "P09QpTHjqHmCLQOTC+WyLkoRNxek4NIvfWt+TnU0etoDUSRxcltyd6+j/ouRbMdLR0j44GqGO+lhI2M4fAHG4g==",
24+
"dependencies": {
25+
"Microsoft.Extensions.Primitives": "10.0.5"
26+
}
27+
},
28+
"Microsoft.Extensions.DependencyInjection.Abstractions": {
29+
"type": "CentralTransitive",
30+
"requested": "[10.0.5, )",
31+
"resolved": "10.0.5",
32+
"contentHash": "iVMtq9eRvzyhx8949EGT0OCYJfXi737SbRVzWXE5GrOgGj5AaZ9eUuxA/BSUfmOMALKn/g8KfFaNQw0eiB3lyA=="
33+
},
34+
"Microsoft.Extensions.Logging.Abstractions": {
35+
"type": "CentralTransitive",
36+
"requested": "[10.0.5, )",
37+
"resolved": "10.0.5",
38+
"contentHash": "9HOdqlDtPptVcmKAjsQ/Nr5Rxfq6FMYLdhvZh1lVmeKR738qeYecQD7+ldooXf+u2KzzR1kafSphWngIM3C6ug==",
39+
"dependencies": {
40+
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.5"
41+
}
42+
},
43+
"Microsoft.Extensions.Options": {
44+
"type": "CentralTransitive",
45+
"requested": "[10.0.5, )",
46+
"resolved": "10.0.5",
47+
"contentHash": "MDaQMdUplw0AIRhWWmbLA7yQEXaLIHb+9CTroTiNS8OlI0LMXS4LCxtopqauiqGCWlRgJ+xyraVD8t6veRAFbw==",
48+
"dependencies": {
49+
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.5",
50+
"Microsoft.Extensions.Primitives": "10.0.5"
51+
}
52+
}
53+
}
554
}
655
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
4+
namespace ChengYuan.AuditLogging;
5+
6+
public sealed class AuditLogEntityChangeEntityConfiguration : IEntityTypeConfiguration<AuditLogEntityChangeEntity>
7+
{
8+
public void Configure(EntityTypeBuilder<AuditLogEntityChangeEntity> builder)
9+
{
10+
ArgumentNullException.ThrowIfNull(builder);
11+
12+
builder.HasKey(entity => entity.Id);
13+
14+
builder.Property(entity => entity.EntityTypeFullName)
15+
.HasMaxLength(512)
16+
.IsRequired();
17+
18+
builder.Property(entity => entity.EntityId)
19+
.HasMaxLength(256);
20+
21+
builder.Property(entity => entity.ChangeTime)
22+
.IsRequired();
23+
24+
builder.Property(entity => entity.SerializedPropertyChanges)
25+
.IsRequired();
26+
27+
builder.HasOne<AuditLogEntity>()
28+
.WithMany(auditLog => auditLog.EntityChanges)
29+
.HasForeignKey(entityChange => entityChange.AuditLogId)
30+
.OnDelete(DeleteBehavior.Cascade);
31+
32+
builder.HasIndex(entity => entity.AuditLogId);
33+
builder.HasIndex(entity => entity.EntityTypeFullName);
34+
}
35+
}

0 commit comments

Comments
 (0)