diff --git a/.github/workflows/sonarcloud-scan.yml b/.github/workflows/sonarcloud-scan.yml
index bc5d41bd..d8f6a50b 100644
--- a/.github/workflows/sonarcloud-scan.yml
+++ b/.github/workflows/sonarcloud-scan.yml
@@ -66,9 +66,9 @@ jobs:
run: |
.\.sonar\scanner\dotnet-sonarscanner begin /k:"gaepdit.complaint-tracking" /o:"gaepdit" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths=coverage.xml /d:sonar.exclusions=src/EfRepository/Migrations/**,src/TestData/**
dotnet build
- coverlet .\.artifacts\DomainTests\bin\Debug\net8.0\DomainTests.dll --target "dotnet" --targetargs "test tests/DomainTests --no-build" --exclude "[TestData]*"
- coverlet .\.artifacts\EfRepositoryTests\bin\Debug\net8.0\EfRepositoryTests.dll --target "dotnet" --targetargs "test tests/EfRepositoryTests --no-build" --exclude "[TestData]*" --exclude "[EfRepository]Cts.EfRepository.Migrations.*" --merge-with "coverage.json"
- coverlet .\.artifacts\LocalRepositoryTests\bin\Debug\net8.0\LocalRepositoryTests.dll --target "dotnet" --targetargs "test tests/LocalRepositoryTests --no-build" --exclude "[TestData]*" --merge-with "coverage.json"
- coverlet .\.artifacts\AppServicesTests\bin\Debug\net8.0\AppServicesTests.dll --target "dotnet" --targetargs "test tests/AppServicesTests --no-build" --exclude "[TestData]*" --merge-with "coverage.json"
- coverlet .\.artifacts\WebAppTests\bin\Debug\net8.0\WebAppTests.dll --target "dotnet" --targetargs "test tests/WebAppTests --no-build" --exclude "[TestData]*" --exclude "[EfRepository]Cts.EfRepository.Migrations.*" --merge-with "coverage.json" -f=opencover -o="coverage.xml"
+ coverlet .\.artifacts\DomainTests\bin\Debug\net9.0\DomainTests.dll --target "dotnet" --targetargs "test tests/DomainTests --no-build" --exclude "[TestData]*"
+ coverlet .\.artifacts\EfRepositoryTests\bin\Debug\net9.0\EfRepositoryTests.dll --target "dotnet" --targetargs "test tests/EfRepositoryTests --no-build" --exclude "[TestData]*" --exclude "[EfRepository]Cts.EfRepository.Migrations.*" --merge-with "coverage.json"
+ coverlet .\.artifacts\LocalRepositoryTests\bin\Debug\net9.0\LocalRepositoryTests.dll --target "dotnet" --targetargs "test tests/LocalRepositoryTests --no-build" --exclude "[TestData]*" --merge-with "coverage.json"
+ coverlet .\.artifacts\AppServicesTests\bin\Debug\net9.0\AppServicesTests.dll --target "dotnet" --targetargs "test tests/AppServicesTests --no-build" --exclude "[TestData]*" --merge-with "coverage.json"
+ coverlet .\.artifacts\WebAppTests\bin\Debug\net9.0\WebAppTests.dll --target "dotnet" --targetargs "test tests/WebAppTests --no-build" --exclude "[TestData]*" --exclude "[EfRepository]Cts.EfRepository.Migrations.*" --merge-with "coverage.json" -f=opencover -o="coverage.xml"
.\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
diff --git a/.idea/.idea.complaint-tracking/.idea/sonarlint.xml b/.idea/.idea.complaint-tracking/.idea/sonarlint.xml
index e28c8f36..de7f1ae6 100644
--- a/.idea/.idea.complaint-tracking/.idea/sonarlint.xml
+++ b/.idea/.idea.complaint-tracking/.idea/sonarlint.xml
@@ -3,6 +3,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index 0fc54fe1..2e044012 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,11 +1,11 @@
-
+
sqlserver.ms
true
com.microsoft.sqlserver.jdbc.SQLServerDriver
- jdbc:sqlserver://10.34.149.104:1433;database=ComplaintTracking
+ jdbc:sqlserver://test-db.gaepd.org:2433;database=ComplaintTracking
@@ -13,11 +13,11 @@
-
+
sqlserver.ms
true
com.microsoft.sqlserver.jdbc.SQLServerDriver
- jdbc:sqlserver://10.34.149.104:2433;database=ComplaintTracking
+ jdbc:sqlserver://db.gaepd.org:1433;database=ComplaintTracking
@@ -25,11 +25,11 @@
-
+
sqlserver.ms
true
com.microsoft.sqlserver.jdbc.SQLServerDriver
- jdbc:sqlserver://10.34.148.199:1433;database=ComplaintTracking
+ jdbc:sqlserver://test-db.gaepd.org:1433;database=ComplaintTracking
diff --git a/.run/Run WebApp.run.xml b/.run/Run WebApp.run.xml
index 955115d2..eaf1b1c6 100644
--- a/.run/Run WebApp.run.xml
+++ b/.run/Run WebApp.run.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/.run/Watch WebApp.run.xml b/.run/Watch WebApp.run.xml
index e9e593bc..492a21b3 100644
--- a/.run/Watch WebApp.run.xml
+++ b/.run/Watch WebApp.run.xml
@@ -1,9 +1,9 @@
-
+
-
+
diff --git a/.vscode/launch.json b/.vscode/launch.json
index d73ff05a..b46e1af2 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -7,7 +7,7 @@
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
- "program": "${workspaceFolder}/.artifacts/WebApp/bin/Debug/net8.0/WebApp.dll",
+ "program": "${workspaceFolder}/.artifacts/WebApp/bin/Debug/net9.0/WebApp.dll",
"args": [],
"cwd": "${workspaceFolder}/src/WebApp",
"stopAtEntry": false,
diff --git a/Directory.Build.props b/Directory.Build.props
index 5c3cae70..695f0ca5 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,11 +1,25 @@
+
+ net9.0
+ enable
+ enable
+
+
$(MSBuildThisFileDirectory).artifacts\$(MSBuildProjectName)
$(BaseProjectArtifactPath)\bin\
$(BaseProjectArtifactPath)\obj\
-
-
- true
-
+
+
+
+ true
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 49b9659d..e12ef54b 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -5,56 +5,39 @@
-
+
-
-
-
+
+
+
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
+
+
+
+
+
-
+
-
+
-
+
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/global.json b/global.json
index 36394634..394a3922 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "8.0.0",
+ "version": "9.0.0",
"rollForward": "latestFeature",
"allowPrerelease": false
}
diff --git a/src/AppServices/AppServices.csproj b/src/AppServices/AppServices.csproj
index 3586d85d..da8aa0d5 100644
--- a/src/AppServices/AppServices.csproj
+++ b/src/AppServices/AppServices.csproj
@@ -1,9 +1,5 @@
-
- net8.0
- enable
- enable
Cts.AppServices
@@ -12,19 +8,14 @@
-
+
-
+
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
diff --git a/src/Domain/Domain.csproj b/src/Domain/Domain.csproj
index b9d2eec9..57e598ee 100644
--- a/src/Domain/Domain.csproj
+++ b/src/Domain/Domain.csproj
@@ -1,9 +1,5 @@
-
- net8.0
- enable
- enable
Cts.Domain
@@ -12,10 +8,5 @@
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
diff --git a/src/EfRepository/EfRepository.csproj b/src/EfRepository/EfRepository.csproj
index 81201008..8f1d1642 100644
--- a/src/EfRepository/EfRepository.csproj
+++ b/src/EfRepository/EfRepository.csproj
@@ -1,9 +1,5 @@
-
- net8.0
- enable
- enable
Cts.EfRepository
@@ -15,15 +11,10 @@
all
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
diff --git a/src/EfRepository/Migrations/20250117160528_UpdateEmailLog.Designer.cs b/src/EfRepository/Migrations/20250117160528_UpdateEmailLog.Designer.cs
new file mode 100644
index 00000000..dbb3c80b
--- /dev/null
+++ b/src/EfRepository/Migrations/20250117160528_UpdateEmailLog.Designer.cs
@@ -0,0 +1,1355 @@
+//
+using System;
+using Cts.EfRepository.Contexts;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace Cts.EfRepository.Migrations
+{
+ [DbContext(typeof(AppDbContext))]
+ [Migration("20250117160528_UpdateEmailLog")]
+ partial class UpdateEmailLog
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.1")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Cts.Domain.DataViews.DataArchiveViews.ClosedComplaint", b =>
+ {
+ b.Property("CallerCity")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerPostalCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerRepresents")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerState")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerStreet")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerStreet2")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintCity")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintClosedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("ComplaintCounty")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintDirections")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b.Property("ComplaintLocation")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintNature")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CurrentOffice")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CurrentOwner")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CurrentOwnerAcceptedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CurrentOwnerAssignedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("EnteredBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EnteredDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("PrimaryConcern")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReceivedBy")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReceivedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("ReviewComments")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReviewedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SecondaryConcern")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceCity")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceContactName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceFacilityId")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceFacilityName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourcePostalCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceState")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceStreet")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SourceStreet2")
+ .HasColumnType("nvarchar(max)");
+
+ b.ToTable((string)null);
+
+ b.ToView("ClosedComplaintsView", (string)null);
+ });
+
+ modelBuilder.Entity("Cts.Domain.DataViews.DataArchiveViews.ClosedComplaintAction", b =>
+ {
+ b.Property("ActionDate")
+ .HasColumnType("date");
+
+ b.Property("ActionType")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Comments")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b.Property("EnteredBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EnteredDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Investigator")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.ToTable((string)null);
+
+ b.ToView("ClosedComplaintActionsView", (string)null);
+ });
+
+ modelBuilder.Entity("Cts.Domain.DataViews.DataArchiveViews.OpenComplaint", b =>
+ {
+ b.Property("CallerCity")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerPostalCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerRepresents")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerState")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerStreet")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CallerStreet2")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintCity")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintCounty")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintDirections")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b.Property("ComplaintLocation")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintNature")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PrimaryConcern")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReceivedBy")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReceivedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("SecondaryConcern")
+ .HasColumnType("nvarchar(max)");
+
+ b.ToTable((string)null);
+
+ b.ToView("OpenComplaintsView", (string)null);
+ });
+
+ modelBuilder.Entity("Cts.Domain.DataViews.DataArchiveViews.RecordsCount", b =>
+ {
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("Order")
+ .HasColumnType("int");
+
+ b.Property("Table")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.ToTable((string)null);
+
+ b.ToView("RecordsCountView", (string)null);
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.ActionTypes.ActionType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Active")
+ .HasColumnType("bit");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CreatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("UpdatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("ActionTypes");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.Attachments.Attachment", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CreatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeletedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("DeletedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FileExtension")
+ .IsRequired()
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("FileName")
+ .IsRequired()
+ .HasMaxLength(245)
+ .HasColumnType("nvarchar(245)");
+
+ b.Property("IsDeleted")
+ .HasColumnType("bit");
+
+ b.Property("IsImage")
+ .HasColumnType("bit");
+
+ b.Property("Size")
+ .HasColumnType("bigint");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("UpdatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UploadedById")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("UploadedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ComplaintId");
+
+ b.HasIndex("UploadedById");
+
+ b.ToTable("Attachments");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.ComplaintActions.ComplaintAction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ActionDate")
+ .HasColumnType("date");
+
+ b.Property("ActionTypeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Comments")
+ .IsRequired()
+ .HasMaxLength(10000)
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CreatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeletedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("DeletedById")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("EnteredById")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("EnteredDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Investigator")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("IsDeleted")
+ .HasColumnType("bit");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("UpdatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionTypeId");
+
+ b.HasIndex("ComplaintId");
+
+ b.HasIndex("DeletedById");
+
+ b.HasIndex("EnteredById");
+
+ b.ToTable("ComplaintActions");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.ComplaintTransitions.ComplaintTransition", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Comment")
+ .HasMaxLength(7000)
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CommittedByUserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("CommittedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CreatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferredToOfficeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TransferredToUserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("TransitionType")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("UpdatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CommittedByUserId");
+
+ b.HasIndex("ComplaintId");
+
+ b.HasIndex("TransferredToOfficeId");
+
+ b.HasIndex("TransferredToUserId");
+
+ b.ToTable("ComplaintTransitions");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.Complaints.Complaint", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("CallerEmail")
+ .HasMaxLength(150)
+ .HasColumnType("nvarchar(150)");
+
+ b.Property("CallerName")
+ .HasMaxLength(150)
+ .HasColumnType("nvarchar(150)");
+
+ b.Property("CallerRepresents")
+ .HasMaxLength(150)
+ .HasColumnType("nvarchar(150)");
+
+ b.Property("ComplaintCity")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.Property("ComplaintClosed")
+ .HasColumnType("bit");
+
+ b.Property("ComplaintClosedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("ComplaintCounty")
+ .HasMaxLength(15)
+ .HasColumnType("nvarchar(15)");
+
+ b.Property("ComplaintDirections")
+ .HasMaxLength(2600)
+ .HasColumnType("nvarchar(2600)");
+
+ b.Property("ComplaintLocation")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("ComplaintNature")
+ .HasMaxLength(15000)
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CreatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CurrentOfficeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CurrentOwnerAcceptedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CurrentOwnerAssignedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CurrentOwnerId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("DeleteComments")
+ .HasMaxLength(7000)
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeletedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("DeletedById")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("EnteredById")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("EnteredDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("IsDeleted")
+ .HasColumnType("bit");
+
+ b.Property("PrimaryConcernId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ReceivedById")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ReceivedDate")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("ReviewComments")
+ .HasMaxLength(7000)
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ReviewedById")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("SecondaryConcernId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SourceContactName")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("SourceEmail")
+ .HasMaxLength(150)
+ .HasColumnType("nvarchar(150)");
+
+ b.Property("SourceFacilityIdNumber")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.Property("SourceFacilityName")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("UpdatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CurrentOfficeId");
+
+ b.HasIndex("CurrentOwnerId");
+
+ b.HasIndex("DeletedById");
+
+ b.HasIndex("EnteredById");
+
+ b.HasIndex("PrimaryConcernId");
+
+ b.HasIndex("ReceivedById");
+
+ b.HasIndex("ReviewedById");
+
+ b.HasIndex("SecondaryConcernId");
+
+ b.ToTable("Complaints");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.Concerns.Concern", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Active")
+ .HasColumnType("bit");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CreatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("UpdatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Concerns");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.Offices.Office", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Active")
+ .HasColumnType("bit");
+
+ b.Property("AssignorId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("CreatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("UpdatedById")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AssignorId");
+
+ b.ToTable("Offices");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Identity.ApplicationUser", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("AccessFailedCount")
+ .HasColumnType("int");
+
+ b.Property("AccountCreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("AccountUpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Active")
+ .HasColumnType("bit");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Email")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("EmailConfirmed")
+ .HasColumnType("bit");
+
+ b.Property("FamilyName")
+ .IsRequired()
+ .HasMaxLength(150)
+ .HasColumnType("nvarchar(150)");
+
+ b.Property("GivenName")
+ .IsRequired()
+ .HasMaxLength(150)
+ .HasColumnType("nvarchar(150)");
+
+ b.Property("LockoutEnabled")
+ .HasColumnType("bit");
+
+ b.Property("LockoutEnd")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("MostRecentLogin")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("NormalizedEmail")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("NormalizedUserName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("ObjectIdentifier")
+ .HasMaxLength(36)
+ .HasColumnType("nvarchar(36)");
+
+ b.Property("OfficeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PasswordHash")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PhoneNumber")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PhoneNumberConfirmed")
+ .HasColumnType("bit");
+
+ b.Property("ProfileUpdatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("SecurityStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TwoFactorEnabled")
+ .HasColumnType("bit");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedEmail")
+ .HasDatabaseName("EmailIndex");
+
+ b.HasIndex("NormalizedUserName")
+ .IsUnique()
+ .HasDatabaseName("UserNameIndex")
+ .HasFilter("[NormalizedUserName] IS NOT NULL");
+
+ b.HasIndex("OfficeId");
+
+ b.ToTable("AspNetUsers", (string)null);
+ });
+
+ modelBuilder.Entity("GaEpd.EmailService.EmailLogRepository.EmailLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CopyRecipients")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("HtmlBody")
+ .HasMaxLength(20000)
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Recipients")
+ .IsRequired()
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("Sender")
+ .IsRequired()
+ .HasMaxLength(300)
+ .HasColumnType("nvarchar(300)");
+
+ b.Property("Subject")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("TextBody")
+ .HasMaxLength(15000)
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("EmailLogs");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("NormalizedName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasDatabaseName("RoleNameIndex")
+ .HasFilter("[NormalizedName] IS NOT NULL");
+
+ b.ToTable("AspNetRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetRoleClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderKey")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("LoginProvider", "ProviderKey");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserLogins", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("RoleId")
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetUserRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AspNetUserTokens", (string)null);
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.Attachments.Attachment", b =>
+ {
+ b.HasOne("Cts.Domain.Entities.Complaints.Complaint", "Complaint")
+ .WithMany("Attachments")
+ .HasForeignKey("ComplaintId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "UploadedBy")
+ .WithMany()
+ .HasForeignKey("UploadedById");
+
+ b.Navigation("Complaint");
+
+ b.Navigation("UploadedBy");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.ComplaintActions.ComplaintAction", b =>
+ {
+ b.HasOne("Cts.Domain.Entities.ActionTypes.ActionType", "ActionType")
+ .WithMany()
+ .HasForeignKey("ActionTypeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Cts.Domain.Entities.Complaints.Complaint", "Complaint")
+ .WithMany("Actions")
+ .HasForeignKey("ComplaintId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "DeletedBy")
+ .WithMany()
+ .HasForeignKey("DeletedById");
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "EnteredBy")
+ .WithMany()
+ .HasForeignKey("EnteredById");
+
+ b.Navigation("ActionType");
+
+ b.Navigation("Complaint");
+
+ b.Navigation("DeletedBy");
+
+ b.Navigation("EnteredBy");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.ComplaintTransitions.ComplaintTransition", b =>
+ {
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "CommittedByUser")
+ .WithMany()
+ .HasForeignKey("CommittedByUserId");
+
+ b.HasOne("Cts.Domain.Entities.Complaints.Complaint", "Complaint")
+ .WithMany("ComplaintTransitions")
+ .HasForeignKey("ComplaintId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Cts.Domain.Entities.Offices.Office", "TransferredToOffice")
+ .WithMany()
+ .HasForeignKey("TransferredToOfficeId");
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "TransferredToUser")
+ .WithMany()
+ .HasForeignKey("TransferredToUserId");
+
+ b.Navigation("CommittedByUser");
+
+ b.Navigation("Complaint");
+
+ b.Navigation("TransferredToOffice");
+
+ b.Navigation("TransferredToUser");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.Complaints.Complaint", b =>
+ {
+ b.HasOne("Cts.Domain.Entities.Offices.Office", "CurrentOffice")
+ .WithMany()
+ .HasForeignKey("CurrentOfficeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "CurrentOwner")
+ .WithMany()
+ .HasForeignKey("CurrentOwnerId");
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "DeletedBy")
+ .WithMany()
+ .HasForeignKey("DeletedById");
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "EnteredBy")
+ .WithMany()
+ .HasForeignKey("EnteredById");
+
+ b.HasOne("Cts.Domain.Entities.Concerns.Concern", "PrimaryConcern")
+ .WithMany()
+ .HasForeignKey("PrimaryConcernId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "ReceivedBy")
+ .WithMany()
+ .HasForeignKey("ReceivedById");
+
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "ReviewedBy")
+ .WithMany()
+ .HasForeignKey("ReviewedById");
+
+ b.HasOne("Cts.Domain.Entities.Concerns.Concern", "SecondaryConcern")
+ .WithMany()
+ .HasForeignKey("SecondaryConcernId");
+
+ b.OwnsOne("Cts.Domain.ValueObjects.IncompleteAddress", "CallerAddress", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("City")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("PostalCode")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("State")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("Street")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("Street2")
+ .HasColumnType("nvarchar(max)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.OwnsOne("Cts.Domain.ValueObjects.PhoneNumber", "CallerPhoneNumber", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("Number")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b1.Property("Type")
+ .HasColumnType("nvarchar(25)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.OwnsOne("Cts.Domain.ValueObjects.PhoneNumber", "CallerSecondaryPhoneNumber", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("Number")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b1.Property("Type")
+ .HasColumnType("nvarchar(25)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.OwnsOne("Cts.Domain.ValueObjects.PhoneNumber", "CallerTertiaryPhoneNumber", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("Number")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b1.Property("Type")
+ .HasColumnType("nvarchar(25)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.OwnsOne("Cts.Domain.ValueObjects.IncompleteAddress", "SourceAddress", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("City")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("PostalCode")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("State")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("Street")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("Street2")
+ .HasColumnType("nvarchar(max)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.OwnsOne("Cts.Domain.ValueObjects.PhoneNumber", "SourcePhoneNumber", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("Number")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b1.Property("Type")
+ .HasColumnType("nvarchar(25)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.OwnsOne("Cts.Domain.ValueObjects.PhoneNumber", "SourceSecondaryPhoneNumber", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("Number")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b1.Property("Type")
+ .HasColumnType("nvarchar(25)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.OwnsOne("Cts.Domain.ValueObjects.PhoneNumber", "SourceTertiaryPhoneNumber", b1 =>
+ {
+ b1.Property("ComplaintId")
+ .HasColumnType("int");
+
+ b1.Property("Number")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b1.Property("Type")
+ .HasColumnType("nvarchar(25)");
+
+ b1.HasKey("ComplaintId");
+
+ b1.ToTable("Complaints");
+
+ b1.WithOwner()
+ .HasForeignKey("ComplaintId");
+ });
+
+ b.Navigation("CallerAddress");
+
+ b.Navigation("CallerPhoneNumber");
+
+ b.Navigation("CallerSecondaryPhoneNumber");
+
+ b.Navigation("CallerTertiaryPhoneNumber");
+
+ b.Navigation("CurrentOffice");
+
+ b.Navigation("CurrentOwner");
+
+ b.Navigation("DeletedBy");
+
+ b.Navigation("EnteredBy");
+
+ b.Navigation("PrimaryConcern");
+
+ b.Navigation("ReceivedBy");
+
+ b.Navigation("ReviewedBy");
+
+ b.Navigation("SecondaryConcern");
+
+ b.Navigation("SourceAddress");
+
+ b.Navigation("SourcePhoneNumber");
+
+ b.Navigation("SourceSecondaryPhoneNumber");
+
+ b.Navigation("SourceTertiaryPhoneNumber");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Entities.Offices.Office", b =>
+ {
+ b.HasOne("Cts.Domain.Identity.ApplicationUser", "Assignor")
+ .WithMany()
+ .HasForeignKey("AssignorId");
+
+ b.Navigation("Assignor");
+ });
+
+ modelBuilder.Entity("Cts.Domain.Identity.ApplicationUser", b =>
+ {
+ b.HasOne("Cts.Domain.Entities.Offices.Office", "Office")
+ .WithMany("StaffMembers")
+ .HasForeignKey("OfficeId");
+
+ b.Navigation("Office");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
+ .WithMany()
+ .HasForeignKey("RoleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim