// <auto-generated />
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using NpgsqlTypes;
using OpenArchival.DataAccess;

#nullable disable

namespace OpenArchival.DataAccess.Migrations
{
    [DbContext(typeof(ApplicationDbContext))]
    [Migration("20251028013051_InitalCreate")]
    partial class InitalCreate
    {
        /// <inheritdoc />
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "9.0.8")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("ArtifactDefectArtifactEntry", b =>
                {
                    b.Property<int>("ArtifactEntriesId")
                        .HasColumnType("integer");

                    b.Property<int>("DefectsId")
                        .HasColumnType("integer");

                    b.HasKey("ArtifactEntriesId", "DefectsId");

                    b.HasIndex("DefectsId");

                    b.ToTable("ArtifactDefectArtifactEntry");
                });

            modelBuilder.Entity("ArtifactEntryArtifactEntry", b =>
                {
                    b.Property<int>("RelatedById")
                        .HasColumnType("integer");

                    b.Property<int>("RelatedToId")
                        .HasColumnType("integer");

                    b.HasKey("RelatedById", "RelatedToId");

                    b.HasIndex("RelatedToId");

                    b.ToTable("ArtifactRelationships", (string)null);
                });

            modelBuilder.Entity("ArtifactEntryArtifactEntryTag", b =>
                {
                    b.Property<int>("ArtifactEntriesId")
                        .HasColumnType("integer");

                    b.Property<int>("TagsId")
                        .HasColumnType("integer");

                    b.HasKey("ArtifactEntriesId", "TagsId");

                    b.HasIndex("TagsId");

                    b.ToTable("ArtifactEntryArtifactEntryTag");
                });

            modelBuilder.Entity("ArtifactEntryListedName", b =>
                {
                    b.Property<int>("ArtifactEntriesId")
                        .HasColumnType("integer");

                    b.Property<int>("ListedNamesId")
                        .HasColumnType("integer");

                    b.HasKey("ArtifactEntriesId", "ListedNamesId");

                    b.HasIndex("ListedNamesId");

                    b.ToTable("ArtifactEntryListedName");
                });

            modelBuilder.Entity("ArtifactEntryTagSearchPageSliderEntry", b =>
                {
                    b.Property<int>("FilterTagsId")
                        .HasColumnType("integer");

                    b.Property<int>("SearchPageSlidersId")
                        .HasColumnType("integer");

                    b.HasKey("FilterTagsId", "SearchPageSlidersId");

                    b.HasIndex("SearchPageSlidersId");

                    b.ToTable("ArtifactEntryTagSearchPageSliderEntry");
                });

            modelBuilder.Entity("ArtifactGroupingBlogPost", b =>
                {
                    b.Property<int>("ArtifactGroupingsId")
                        .HasColumnType("integer");

                    b.Property<int>("BlogPostsId")
                        .HasColumnType("integer");

                    b.HasKey("ArtifactGroupingsId", "BlogPostsId");

                    b.HasIndex("BlogPostsId");

                    b.ToTable("ArtifactGroupingBlogPost");
                });

            modelBuilder.Entity("BlogPostBlogPostTag", b =>
                {
                    b.Property<int>("BlogPostsId")
                        .HasColumnType("integer");

                    b.Property<int>("TagsId")
                        .HasColumnType("integer");

                    b.HasKey("BlogPostsId", "TagsId");

                    b.HasIndex("TagsId");

                    b.ToTable("BlogPostBlogPostTag");
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
                {
                    b.Property<string>("Id")
                        .HasColumnType("text");

                    b.Property<string>("ConcurrencyStamp")
                        .IsConcurrencyToken()
                        .HasColumnType("text");

                    b.Property<string>("Name")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)");

                    b.Property<string>("NormalizedName")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)");

                    b.HasKey("Id");

                    b.HasIndex("NormalizedName")
                        .IsUnique()
                        .HasDatabaseName("RoleNameIndex");

                    b.ToTable("AspNetRoles", (string)null);
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("ClaimType")
                        .HasColumnType("text");

                    b.Property<string>("ClaimValue")
                        .HasColumnType("text");

                    b.Property<string>("RoleId")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.HasIndex("RoleId");

                    b.ToTable("AspNetRoleClaims", (string)null);
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("ClaimType")
                        .HasColumnType("text");

                    b.Property<string>("ClaimValue")
                        .HasColumnType("text");

                    b.Property<string>("UserId")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.HasIndex("UserId");

                    b.ToTable("AspNetUserClaims", (string)null);
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
                {
                    b.Property<string>("LoginProvider")
                        .HasColumnType("text");

                    b.Property<string>("ProviderKey")
                        .HasColumnType("text");

                    b.Property<string>("ProviderDisplayName")
                        .HasColumnType("text");

                    b.Property<string>("UserId")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("LoginProvider", "ProviderKey");

                    b.HasIndex("UserId");

                    b.ToTable("AspNetUserLogins", (string)null);
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
                {
                    b.Property<string>("UserId")
                        .HasColumnType("text");

                    b.Property<string>("RoleId")
                        .HasColumnType("text");

                    b.HasKey("UserId", "RoleId");

                    b.HasIndex("RoleId");

                    b.ToTable("AspNetUserRoles", (string)null);
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
                {
                    b.Property<string>("UserId")
                        .HasColumnType("text");

                    b.Property<string>("LoginProvider")
                        .HasColumnType("text");

                    b.Property<string>("Name")
                        .HasColumnType("text");

                    b.Property<string>("Value")
                        .HasColumnType("text");

                    b.HasKey("UserId", "LoginProvider", "Name");

                    b.ToTable("AspNetUserTokens", (string)null);
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ApplicationUser", b =>
                {
                    b.Property<string>("Id")
                        .HasColumnType("text");

                    b.Property<int>("AccessFailedCount")
                        .HasColumnType("integer");

                    b.Property<string>("ConcurrencyStamp")
                        .IsConcurrencyToken()
                        .HasColumnType("text");

                    b.Property<string>("Email")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)");

                    b.Property<bool>("EmailConfirmed")
                        .HasColumnType("boolean");

                    b.Property<bool>("LockoutEnabled")
                        .HasColumnType("boolean");

                    b.Property<DateTimeOffset?>("LockoutEnd")
                        .HasColumnType("timestamp with time zone");

                    b.Property<string>("NormalizedEmail")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)");

                    b.Property<string>("NormalizedUserName")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)");

                    b.Property<string>("PasswordHash")
                        .HasColumnType("text");

                    b.Property<string>("PermissionLevel")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("PhoneNumber")
                        .HasColumnType("text");

                    b.Property<bool>("PhoneNumberConfirmed")
                        .HasColumnType("boolean");

                    b.Property<string>("SecurityStamp")
                        .HasColumnType("text");

                    b.Property<bool>("TwoFactorEnabled")
                        .HasColumnType("boolean");

                    b.Property<string>("UserName")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)");

                    b.HasKey("Id");

                    b.HasIndex("NormalizedEmail")
                        .HasDatabaseName("EmailIndex");

                    b.HasIndex("NormalizedUserName")
                        .IsUnique()
                        .HasDatabaseName("UserNameIndex");

                    b.ToTable("AspNetUsers", (string)null);
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArchiveCategory", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Description")
                        .HasColumnType("text");

                    b.PrimitiveCollection<List<string>>("FieldDescriptions")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.PrimitiveCollection<List<string>>("FieldNames")
                        .IsRequired()
                        .HasColumnType("text[]");

                    b.Property<string>("FieldSeparator")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("ArchiveCategories");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactDefect", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Description")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("ArtifactDefects");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<int>("ArtifactGroupingId")
                        .HasColumnType("integer");

                    b.Property<string>("ArtifactNumber")
                        .HasColumnType("text");

                    b.PrimitiveCollection<List<DateTime>>("AssociatedDates")
                        .HasColumnType("timestamp with time zone[]");

                    b.Property<string>("Description")
                        .HasColumnType("text");

                    b.Property<string>("FileTextContent")
                        .HasColumnType("text");

                    b.Property<bool>("IsPubliclyVisible")
                        .HasColumnType("boolean");

                    b.PrimitiveCollection<List<string>>("Links")
                        .HasColumnType("text[]");

                    b.Property<int>("Quantity")
                        .HasColumnType("integer");

                    b.Property<int>("StorageLocationId")
                        .HasColumnType("integer");

                    b.Property<string>("Title")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<int>("TypeId")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("ArtifactGroupingId");

                    b.HasIndex("StorageLocationId");

                    b.HasIndex("TypeId");

                    b.ToTable("ArtifactEntries");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("ArtifactEntryTags");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("AllSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("AllSearchVector")
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "AllSearchString" });

                    b.Property<int>("CategoryId")
                        .HasColumnType("integer");

                    b.Property<string>("DefectsSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("DefectsSearchVector")
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "DefectsSearchString" });

                    b.Property<string>("Description")
                        .HasColumnType("text");

                    b.Property<string>("DescriptionSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("DescriptionSearchVector")
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "DescriptionSearchString" });

                    b.Property<string>("FileContentSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("FileContentSearchVector")
                        .IsRequired()
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "FileContentSearchString" });

                    b.Property<string>("FilenamesSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("FilenamesSearchVector")
                        .IsRequired()
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "FilenamesSearchString" });

                    b.Property<bool>("IsPublicallyVisible")
                        .HasColumnType("boolean");

                    b.Property<string>("ListedNamesSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("ListedNamesSearchVector")
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "ListedNamesSearchString" });

                    b.Property<string>("TagsSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("TagsSearchVector")
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "TagsSearchString" });

                    b.Property<string>("Title")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<string>("TitleSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("TitleSearchVector")
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "TitleSearchString" });

                    b.Property<int>("TypeId")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("AllSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("AllSearchVector"), "GIN");

                    b.HasIndex("CategoryId");

                    b.HasIndex("DefectsSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("DefectsSearchVector"), "GIN");

                    b.HasIndex("DescriptionSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("DescriptionSearchVector"), "GIN");

                    b.HasIndex("FileContentSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("FileContentSearchVector"), "GIN");

                    b.HasIndex("FilenamesSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("FilenamesSearchVector"), "GIN");

                    b.HasIndex("ListedNamesSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("ListedNamesSearchVector"), "GIN");

                    b.HasIndex("TagsSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("TagsSearchVector"), "GIN");

                    b.HasIndex("TitleSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("TitleSearchVector"), "GIN");

                    b.HasIndex("TypeId");

                    b.ToTable("ArtifactGroupings");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGroupingViewCount", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<int>("ArtifactGroupingId")
                        .HasColumnType("integer");

                    b.Property<int>("Views")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("ArtifactGroupingId")
                        .IsUnique();

                    b.ToTable("ArtifactGroupingViewCounts");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactStorageLocation", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Location")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("ArtifactStorageLocations");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactType", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("ArtifactTypes");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.BlogPost", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("AllSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("AllSearchVector")
                        .IsRequired()
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "AllSearchString" });

                    b.Property<string>("Content")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("ContentSearchVector")
                        .IsRequired()
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "Content" });

                    b.Property<DateTime>("CreationTime")
                        .HasColumnType("timestamp with time zone");

                    b.Property<DateTime>("ModifiedTime")
                        .HasColumnType("timestamp with time zone");

                    b.Property<string>("TagsSearchString")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("TagsSearchVector")
                        .IsRequired()
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "TagsSearchString" });

                    b.Property<string>("Title")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<NpgsqlTsVector>("TitleSearchVector")
                        .IsRequired()
                        .ValueGeneratedOnAddOrUpdate()
                        .HasColumnType("tsvector")
                        .HasAnnotation("Npgsql:TsVectorConfig", "english")
                        .HasAnnotation("Npgsql:TsVectorProperties", new[] { "Title" });

                    b.HasKey("Id");

                    b.HasIndex("AllSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("AllSearchVector"), "GIN");

                    b.HasIndex("ContentSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("ContentSearchVector"), "GIN");

                    b.HasIndex("TagsSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("TagsSearchVector"), "GIN");

                    b.HasIndex("TitleSearchVector");

                    NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("TitleSearchVector"), "GIN");

                    b.ToTable("BlogPosts");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.BlogPostTag", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("BlogPostTags");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.BlogPostViewCount", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<int>("BlogPostId")
                        .HasColumnType("integer");

                    b.Property<int>("Views")
                        .HasColumnType("integer");

                    b.HasKey("Id");

                    b.HasIndex("BlogPostId")
                        .IsUnique();

                    b.ToTable("BlogPostViews");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<int?>("ArtifactGroupingId")
                        .HasColumnType("integer");

                    b.Property<string>("OriginalName")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<int?>("ParentArtifactEntryId")
                        .HasColumnType("integer");

                    b.Property<int?>("ParentBlogPostId")
                        .HasColumnType("integer");

                    b.Property<string>("Path")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.HasIndex("ArtifactGroupingId");

                    b.HasIndex("ParentArtifactEntryId");

                    b.HasIndex("ParentBlogPostId")
                        .IsUnique();

                    b.ToTable("ArtifactFilePaths");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Value")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("ArtifactAssociatedNames");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.SearchPageSliderEntry", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));

                    b.Property<string>("Description")
                        .IsRequired()
                        .HasColumnType("text");

                    b.Property<int>("MaxCount")
                        .HasColumnType("integer");

                    b.Property<string>("Title")
                        .IsRequired()
                        .HasColumnType("text");

                    b.HasKey("Id");

                    b.ToTable("SearchPageSliderEntries");
                });

            modelBuilder.Entity("ArtifactDefectArtifactEntry", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
                        .WithMany()
                        .HasForeignKey("ArtifactEntriesId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ArtifactDefect", null)
                        .WithMany()
                        .HasForeignKey("DefectsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("ArtifactEntryArtifactEntry", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
                        .WithMany()
                        .HasForeignKey("RelatedById")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
                        .WithMany()
                        .HasForeignKey("RelatedToId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("ArtifactEntryArtifactEntryTag", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
                        .WithMany()
                        .HasForeignKey("ArtifactEntriesId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ArtifactEntryTag", null)
                        .WithMany()
                        .HasForeignKey("TagsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("ArtifactEntryListedName", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
                        .WithMany()
                        .HasForeignKey("ArtifactEntriesId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ListedName", null)
                        .WithMany()
                        .HasForeignKey("ListedNamesId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("ArtifactEntryTagSearchPageSliderEntry", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactEntryTag", null)
                        .WithMany()
                        .HasForeignKey("FilterTagsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.SearchPageSliderEntry", null)
                        .WithMany()
                        .HasForeignKey("SearchPageSlidersId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("ArtifactGroupingBlogPost", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
                        .WithMany()
                        .HasForeignKey("ArtifactGroupingsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.BlogPost", null)
                        .WithMany()
                        .HasForeignKey("BlogPostsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("BlogPostBlogPostTag", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.BlogPost", null)
                        .WithMany()
                        .HasForeignKey("BlogPostsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.BlogPostTag", null)
                        .WithMany()
                        .HasForeignKey("TagsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
                {
                    b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
                        .WithMany()
                        .HasForeignKey("RoleId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ApplicationUser", null)
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ApplicationUser", null)
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
                {
                    b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
                        .WithMany()
                        .HasForeignKey("RoleId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ApplicationUser", null)
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ApplicationUser", null)
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ArtifactGrouping")
                        .WithMany("ChildArtifactEntries")
                        .HasForeignKey("ArtifactGroupingId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
                        .WithMany("ArtifactEntries")
                        .HasForeignKey("StorageLocationId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ArtifactType", "Type")
                        .WithMany("ArtifactEntries")
                        .HasForeignKey("TypeId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("ArtifactGrouping");

                    b.Navigation("StorageLocation");

                    b.Navigation("Type");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
                        .WithMany()
                        .HasForeignKey("CategoryId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("OpenArchival.DataAccess.ArtifactType", "Type")
                        .WithMany()
                        .HasForeignKey("TypeId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.OwnsOne("OpenArchival.DataAccess.IdentifierFields", "IdentifierFields", b1 =>
                        {
                            b1.Property<int>("ArtifactGroupingId")
                                .HasColumnType("integer");

                            b1.PrimitiveCollection<List<string>>("Values")
                                .IsRequired()
                                .HasColumnType("text[]");

                            b1.HasKey("ArtifactGroupingId");

                            b1.ToTable("ArtifactGroupings");

                            b1.ToJson("IdentifierFields");

                            b1.WithOwner()
                                .HasForeignKey("ArtifactGroupingId");
                        });

                    b.Navigation("Category");

                    b.Navigation("IdentifierFields")
                        .IsRequired();

                    b.Navigation("Type");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGroupingViewCount", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "Grouping")
                        .WithOne("ViewCount")
                        .HasForeignKey("OpenArchival.DataAccess.ArtifactGroupingViewCount", "ArtifactGroupingId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Grouping");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.BlogPostViewCount", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.BlogPost", "Post")
                        .WithOne("Views")
                        .HasForeignKey("OpenArchival.DataAccess.BlogPostViewCount", "BlogPostId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Post");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
                {
                    b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
                        .WithMany("ChildFilePathListings")
                        .HasForeignKey("ArtifactGroupingId");

                    b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
                        .WithMany("Files")
                        .HasForeignKey("ParentArtifactEntryId")
                        .OnDelete(DeleteBehavior.Cascade);

                    b.HasOne("OpenArchival.DataAccess.BlogPost", "ParentBlogPost")
                        .WithOne("MainPhoto")
                        .HasForeignKey("OpenArchival.DataAccess.FilePathListing", "ParentBlogPostId");

                    b.Navigation("ParentArtifactEntry");

                    b.Navigation("ParentBlogPost");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
                {
                    b.Navigation("Files");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
                {
                    b.Navigation("ChildArtifactEntries");

                    b.Navigation("ChildFilePathListings");

                    b.Navigation("ViewCount");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactStorageLocation", b =>
                {
                    b.Navigation("ArtifactEntries");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.ArtifactType", b =>
                {
                    b.Navigation("ArtifactEntries");
                });

            modelBuilder.Entity("OpenArchival.DataAccess.BlogPost", b =>
                {
                    b.Navigation("MainPhoto")
                        .IsRequired();

                    b.Navigation("Views")
                        .IsRequired();
                });
#pragma warning restore 612, 618
        }
    }
}
