Got most of admin panel working. Data issues fixed

This commit is contained in:
Vincent Allen
2025-09-02 09:27:23 -04:00
parent 3d82040e75
commit b2835f65c0
401 changed files with 10478 additions and 10675 deletions

View File

@@ -1,10 +1,12 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using System.Text.Json;
using OpenArchival.DataAccess;
using Microsoft.EntityFrameworkCore;
namespace OpenArchival.DataAccess;
public class ArchiveDbContext : DbContext
public class ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : IdentityDbContext<ApplicationUser>(options)
{
public DbSet<ArtifactGrouping> ArtifactGroupings { get; set; }
@@ -18,50 +20,35 @@ public class ArchiveDbContext : DbContext
public DbSet<FilePathListing> ArtifactFilePaths { get; set; }
public DbSet<ArchiveCategory> ArtifactGroupingCategories { get; set; }
public DbSet<ArtifactDefect> ArtifactDefects { get; set; }
public DbSet<ArtifactStorageLocation> ArtifactStorageLocations { get; set; }
public DbSet<ArtifactType> ArtifactTypes { get; set; }
public ArchiveDbContext(DbContextOptions<ArchiveDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ArtifactGrouping>()
.HasMany(p => p.RelatedArtifactGroupings)
.WithMany()
.UsingEntity(j => j.ToTable("RelatedGroupings"));
modelBuilder.Entity<ArtifactEntry>()
.HasMany(p => p.Files)
.WithOne(p => p.ParentArtifactEntry)
.HasForeignKey(p => p.ParentArtifactEntryId)
.IsRequired(false);
modelBuilder.Entity<ArtifactEntry>()
.HasMany(a => a.RelatedTo)
.WithMany(a => a.RelatedBy)
.UsingEntity(j => j.ToTable("ArtifactRelationships"));
modelBuilder.Entity<ArtifactGrouping>()
.OwnsOne(p => p.IdentifierFields)
.ToJson();
modelBuilder.Entity<ArtifactEntry>(builder =>
{
builder.Property(p => p.FileTextContent)
.HasConversion
(
v => JsonSerializer.Serialize
(v, new JsonSerializerOptions()),
v => JsonSerializer.Deserialize<Dictionary<string, string>>
(v, new JsonSerializerOptions()) ?? new Dictionary<string, string>()
);
});
modelBuilder.Entity<ArtifactGrouping>()
.HasMany(grouping => grouping.ChildArtifactEntries)
.WithOne(entry => entry.ArtifactGrouping)
.HasForeignKey(entry => entry.ArtifactGroupingId)
.OnDelete(DeleteBehavior.Cascade);
var dictionaryComparer = new ValueComparer<Dictionary<string, string>>(
(dictionary1, dictionary2) => dictionary1.OrderBy(pair => pair.Key)
@@ -73,16 +60,5 @@ public class ArchiveDbContext : DbContext
sourceDictionary => new Dictionary<string, string>(sourceDictionary)
);
modelBuilder.Entity<ArtifactEntry>(builder =>
{
builder.Property(p => p.FileTextContent)
.HasConversion
(
v => JsonSerializer.Serialize(v, new JsonSerializerOptions()),
v => JsonSerializer.Deserialize<Dictionary<string, string>>(v, new JsonSerializerOptions()) ?? new Dictionary<string, string>()
).Metadata
.SetValueComparer(dictionaryComparer);
});
}
}

View File

@@ -0,0 +1,45 @@
// Create a new file, e.g., /Data/IdentityDataSeeder.cs
using Microsoft.AspNetCore.Identity;
using OpenArchival.DataAccess; // Your project's namespace for ApplicationUser
public static class IdentityDataSeeder
{
public static async Task SeedRolesAndAdminUserAsync(IServiceProvider serviceProvider)
{
// Get the required services
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
// --- Create Roles If They Don't Exist ---
string[] roleNames = { "Admin", "User" };
foreach (var roleName in roleNames)
{
if (!await roleManager.RoleExistsAsync(roleName))
{
await roleManager.CreateAsync(new IdentityRole(roleName));
}
}
// --- Create a Default Admin User If It Doesn't Exist ---
var adminEmail = "admin@admin.com";
if (await userManager.FindByEmailAsync(adminEmail) == null)
{
var adminUser = new ApplicationUser
{
UserName = adminEmail,
Email = adminEmail,
EmailConfirmed = true // Bypass email confirmation for the seeder
};
// Be sure to use a strong password from configuration in a real app
var result = await userManager.CreateAsync(adminUser, "StrongAdminPassword123!");
if (result.Succeeded)
{
// Assign the 'Admin' role to the new user
await userManager.AddToRoleAsync(adminUser, "Admin");
}
}
}
}

View File

@@ -1,380 +0,0 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ArchiveDbContext))]
[Migration("20250806141452_AllModels")]
partial class AllModels
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.7")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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("ArtifactGroupingArtifactGrouping", b =>
{
b.Property<int>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("RelatedArtifactGroupingsId")
.HasColumnType("integer");
b.HasKey("ArtifactGroupingId", "RelatedArtifactGroupingsId");
b.HasIndex("RelatedArtifactGroupingsId");
b.ToTable("RelatedGroupings", (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("ArchiveCategory");
});
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<string>("ArtifactNumber")
.HasColumnType("text");
b.PrimitiveCollection<List<DateTime>>("AssociatedDates")
.HasColumnType("timestamp with time zone[]");
b.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<string>("FileTextContent")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.PrimitiveCollection<List<string>>("Links")
.HasColumnType("text[]");
b.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("StorageLocation")
.HasColumnType("text");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactGroupingId");
b.ToTable("ArtifactEntries");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.ToTable("ArtifactEntryTags");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssocaitedNames");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactFilePaths");
});
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("ArtifactGroupingArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("ArtifactGroupingId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("RelatedArtifactGroupingsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
b.Navigation("ParentArtifactGrouping");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany("ChildTags")
.HasForeignKey("ArtifactGroupingId");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
b.Navigation("ChildTags");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -1,380 +0,0 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ArchiveDbContext))]
[Migration("20250806144037_AllModelsFixedComparer")]
partial class AllModelsFixedComparer
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.7")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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("ArtifactGroupingArtifactGrouping", b =>
{
b.Property<int>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("RelatedArtifactGroupingsId")
.HasColumnType("integer");
b.HasKey("ArtifactGroupingId", "RelatedArtifactGroupingsId");
b.HasIndex("RelatedArtifactGroupingsId");
b.ToTable("RelatedGroupings", (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("ArchiveCategory");
});
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<string>("ArtifactNumber")
.HasColumnType("text");
b.PrimitiveCollection<List<DateTime>>("AssociatedDates")
.HasColumnType("timestamp with time zone[]");
b.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<string>("FileTextContent")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.PrimitiveCollection<List<string>>("Links")
.HasColumnType("text[]");
b.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("StorageLocation")
.HasColumnType("text");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactGroupingId");
b.ToTable("ArtifactEntries");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.ToTable("ArtifactEntryTags");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssocaitedNames");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactFilePaths");
});
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("ArtifactGroupingArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("ArtifactGroupingId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("RelatedArtifactGroupingsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
b.Navigation("ParentArtifactGrouping");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany("ChildTags")
.HasForeignKey("ArtifactGroupingId");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
b.Navigation("ChildTags");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -1,59 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class NullableParentArtifactEntryId : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactFilePaths_ArtifactEntries_ParentArtifactEntryId",
table: "ArtifactFilePaths");
migrationBuilder.AlterColumn<int>(
name: "ParentArtifactEntryId",
table: "ArtifactFilePaths",
type: "integer",
nullable: true,
oldClrType: typeof(int),
oldType: "integer");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactFilePaths_ArtifactEntries_ParentArtifactEntryId",
table: "ArtifactFilePaths",
column: "ParentArtifactEntryId",
principalTable: "ArtifactEntries",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactFilePaths_ArtifactEntries_ParentArtifactEntryId",
table: "ArtifactFilePaths");
migrationBuilder.AlterColumn<int>(
name: "ParentArtifactEntryId",
table: "ArtifactFilePaths",
type: "integer",
nullable: false,
defaultValue: 0,
oldClrType: typeof(int),
oldType: "integer",
oldNullable: true);
migrationBuilder.AddForeignKey(
name: "FK_ArtifactFilePaths_ArtifactEntries_ParentArtifactEntryId",
table: "ArtifactFilePaths",
column: "ParentArtifactEntryId",
principalTable: "ArtifactEntries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -1,77 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class AddStorageLocations : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "StorageLocation",
table: "ArtifactEntries");
migrationBuilder.AddColumn<int>(
name: "StorageLocationId",
table: "ArtifactEntries",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.CreateTable(
name: "ArtifactStorageLocations",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Location = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ArtifactStorageLocations", x => x.Id);
});
migrationBuilder.CreateIndex(
name: "IX_ArtifactEntries_StorageLocationId",
table: "ArtifactEntries",
column: "StorageLocationId");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactEntries_ArtifactStorageLocations_StorageLocationId",
table: "ArtifactEntries",
column: "StorageLocationId",
principalTable: "ArtifactStorageLocations",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactEntries_ArtifactStorageLocations_StorageLocationId",
table: "ArtifactEntries");
migrationBuilder.DropTable(
name: "ArtifactStorageLocations");
migrationBuilder.DropIndex(
name: "IX_ArtifactEntries_StorageLocationId",
table: "ArtifactEntries");
migrationBuilder.DropColumn(
name: "StorageLocationId",
table: "ArtifactEntries");
migrationBuilder.AddColumn<string>(
name: "StorageLocation",
table: "ArtifactEntries",
type: "text",
nullable: true);
}
}
}

View File

@@ -1,105 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class FixTypo : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactAssocaitedNames_ArtifactEntries_ParentArtifactEntry~",
table: "ArtifactAssocaitedNames");
migrationBuilder.DropPrimaryKey(
name: "PK_ArtifactAssocaitedNames",
table: "ArtifactAssocaitedNames");
migrationBuilder.RenameTable(
name: "ArtifactAssocaitedNames",
newName: "ArtifactAssociatedNames");
migrationBuilder.RenameColumn(
name: "IsPublicallyVisible",
table: "ArtifactEntries",
newName: "IsPubliclyVisible");
migrationBuilder.RenameIndex(
name: "IX_ArtifactAssocaitedNames_ParentArtifactEntryId",
table: "ArtifactAssociatedNames",
newName: "IX_ArtifactAssociatedNames_ParentArtifactEntryId");
migrationBuilder.AddPrimaryKey(
name: "PK_ArtifactAssociatedNames",
table: "ArtifactAssociatedNames",
column: "Id");
migrationBuilder.CreateTable(
name: "ArtifactTypes",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ArtifactTypes", x => x.Id);
});
migrationBuilder.AddForeignKey(
name: "FK_ArtifactAssociatedNames_ArtifactEntries_ParentArtifactEntry~",
table: "ArtifactAssociatedNames",
column: "ParentArtifactEntryId",
principalTable: "ArtifactEntries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactAssociatedNames_ArtifactEntries_ParentArtifactEntry~",
table: "ArtifactAssociatedNames");
migrationBuilder.DropTable(
name: "ArtifactTypes");
migrationBuilder.DropPrimaryKey(
name: "PK_ArtifactAssociatedNames",
table: "ArtifactAssociatedNames");
migrationBuilder.RenameTable(
name: "ArtifactAssociatedNames",
newName: "ArtifactAssocaitedNames");
migrationBuilder.RenameColumn(
name: "IsPubliclyVisible",
table: "ArtifactEntries",
newName: "IsPublicallyVisible");
migrationBuilder.RenameIndex(
name: "IX_ArtifactAssociatedNames_ParentArtifactEntryId",
table: "ArtifactAssocaitedNames",
newName: "IX_ArtifactAssocaitedNames_ParentArtifactEntryId");
migrationBuilder.AddPrimaryKey(
name: "PK_ArtifactAssocaitedNames",
table: "ArtifactAssocaitedNames",
column: "Id");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactAssocaitedNames_ArtifactEntries_ParentArtifactEntry~",
table: "ArtifactAssocaitedNames",
column: "ParentArtifactEntryId",
principalTable: "ArtifactEntries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -12,9 +12,9 @@ using OpenArchival.DataAccess;
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ArchiveDbContext))]
[Migration("20250807180849_FixTypo")]
partial class FixTypo
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250812183602_InitalCreate")]
partial class InitalCreate
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -243,7 +243,33 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactTypes");
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactFilePaths");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
@@ -272,32 +298,6 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactAssociatedNames");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactFilePaths");
});
modelBuilder.Entity("ArtifactEntryArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
@@ -385,7 +385,16 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
@@ -396,15 +405,6 @@ namespace OpenArchival.DataAccess.Migrations
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");

View File

@@ -8,7 +8,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class AllModels : Migration
public partial class InitalCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
@@ -43,6 +43,32 @@ namespace OpenArchival.DataAccess.Migrations
table.PrimaryKey("PK_ArtifactDefects", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ArtifactStorageLocations",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Location = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ArtifactStorageLocations", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ArtifactTypes",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ArtifactTypes", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ArtifactGroupings",
columns: table => new
@@ -76,14 +102,14 @@ namespace OpenArchival.DataAccess.Migrations
ArtifactNumber = table.Column<string>(type: "text", nullable: true),
Title = table.Column<string>(type: "text", nullable: false),
Description = table.Column<string>(type: "text", nullable: true),
StorageLocation = table.Column<string>(type: "text", nullable: true),
StorageLocationId = table.Column<int>(type: "integer", nullable: false),
ListedNames = table.Column<List<string>>(type: "text[]", nullable: true),
AssociatedDates = table.Column<List<DateTime>>(type: "timestamp with time zone[]", nullable: true),
Defects = table.Column<List<string>>(type: "text[]", nullable: true),
Links = table.Column<List<string>>(type: "text[]", nullable: true),
ParentArtifactGroupingId = table.Column<int>(type: "integer", nullable: true),
FileTextContent = table.Column<string>(type: "text", nullable: true),
IsPublicallyVisible = table.Column<bool>(type: "boolean", nullable: false)
IsPubliclyVisible = table.Column<bool>(type: "boolean", nullable: false)
},
constraints: table =>
{
@@ -93,6 +119,12 @@ namespace OpenArchival.DataAccess.Migrations
column: x => x.ParentArtifactGroupingId,
principalTable: "ArtifactGroupings",
principalColumn: "Id");
table.ForeignKey(
name: "FK_ArtifactEntries_ArtifactStorageLocations_StorageLocationId",
column: x => x.StorageLocationId,
principalTable: "ArtifactStorageLocations",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
@@ -139,7 +171,7 @@ namespace OpenArchival.DataAccess.Migrations
});
migrationBuilder.CreateTable(
name: "ArtifactAssocaitedNames",
name: "ArtifactAssociatedNames",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
@@ -151,9 +183,9 @@ namespace OpenArchival.DataAccess.Migrations
},
constraints: table =>
{
table.PrimaryKey("PK_ArtifactAssocaitedNames", x => x.Id);
table.PrimaryKey("PK_ArtifactAssociatedNames", x => x.Id);
table.ForeignKey(
name: "FK_ArtifactAssocaitedNames_ArtifactEntries_ParentArtifactEntry~",
name: "FK_ArtifactAssociatedNames_ArtifactEntries_ParentArtifactEntry~",
column: x => x.ParentArtifactEntryId,
principalTable: "ArtifactEntries",
principalColumn: "Id",
@@ -166,7 +198,7 @@ namespace OpenArchival.DataAccess.Migrations
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
ParentArtifactEntryId = table.Column<int>(type: "integer", nullable: false),
ParentArtifactEntryId = table.Column<int>(type: "integer", nullable: true),
OriginalName = table.Column<string>(type: "text", nullable: false),
Path = table.Column<string>(type: "text", nullable: false)
},
@@ -177,8 +209,7 @@ namespace OpenArchival.DataAccess.Migrations
name: "FK_ArtifactFilePaths_ArtifactEntries_ParentArtifactEntryId",
column: x => x.ParentArtifactEntryId,
principalTable: "ArtifactEntries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
principalColumn: "Id");
});
migrationBuilder.CreateTable(
@@ -206,8 +237,8 @@ namespace OpenArchival.DataAccess.Migrations
});
migrationBuilder.CreateIndex(
name: "IX_ArtifactAssocaitedNames_ParentArtifactEntryId",
table: "ArtifactAssocaitedNames",
name: "IX_ArtifactAssociatedNames_ParentArtifactEntryId",
table: "ArtifactAssociatedNames",
column: "ParentArtifactEntryId");
migrationBuilder.CreateIndex(
@@ -215,6 +246,11 @@ namespace OpenArchival.DataAccess.Migrations
table: "ArtifactEntries",
column: "ParentArtifactGroupingId");
migrationBuilder.CreateIndex(
name: "IX_ArtifactEntries_StorageLocationId",
table: "ArtifactEntries",
column: "StorageLocationId");
migrationBuilder.CreateIndex(
name: "IX_ArtifactEntryArtifactEntryTag_TagsId",
table: "ArtifactEntryArtifactEntryTag",
@@ -245,7 +281,7 @@ namespace OpenArchival.DataAccess.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "ArtifactAssocaitedNames");
name: "ArtifactAssociatedNames");
migrationBuilder.DropTable(
name: "ArtifactDefects");
@@ -256,6 +292,9 @@ namespace OpenArchival.DataAccess.Migrations
migrationBuilder.DropTable(
name: "ArtifactFilePaths");
migrationBuilder.DropTable(
name: "ArtifactTypes");
migrationBuilder.DropTable(
name: "RelatedGroupings");
@@ -268,6 +307,9 @@ namespace OpenArchival.DataAccess.Migrations
migrationBuilder.DropTable(
name: "ArtifactGroupings");
migrationBuilder.DropTable(
name: "ArtifactStorageLocations");
migrationBuilder.DropTable(
name: "ArchiveCategory");
}

View File

@@ -0,0 +1,422 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250813011348_ChangedArtifactRelationships")]
partial class ChangedArtifactRelationships
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.7")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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("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("ArchiveCategory");
});
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<string>("ArtifactNumber")
.HasColumnType("text");
b.PrimitiveCollection<List<DateTime>>("AssociatedDates")
.HasColumnType("timestamp with time zone[]");
b.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
b.ToTable("ArtifactEntries");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.ToTable("ArtifactEntryTags");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany("ChildTags")
.HasForeignKey("ArtifactGroupingId");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
b.Navigation("ChildTags");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,82 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class ChangedArtifactRelationships : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "RelatedGroupings");
migrationBuilder.CreateTable(
name: "ArtifactRelationships",
columns: table => new
{
RelatedById = table.Column<int>(type: "integer", nullable: false),
RelatedToId = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ArtifactRelationships", x => new { x.RelatedById, x.RelatedToId });
table.ForeignKey(
name: "FK_ArtifactRelationships_ArtifactEntries_RelatedById",
column: x => x.RelatedById,
principalTable: "ArtifactEntries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ArtifactRelationships_ArtifactEntries_RelatedToId",
column: x => x.RelatedToId,
principalTable: "ArtifactEntries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_ArtifactRelationships_RelatedToId",
table: "ArtifactRelationships",
column: "RelatedToId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "ArtifactRelationships");
migrationBuilder.CreateTable(
name: "RelatedGroupings",
columns: table => new
{
ArtifactGroupingId = table.Column<int>(type: "integer", nullable: false),
RelatedArtifactGroupingsId = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_RelatedGroupings", x => new { x.ArtifactGroupingId, x.RelatedArtifactGroupingsId });
table.ForeignKey(
name: "FK_RelatedGroupings_ArtifactGroupings_ArtifactGroupingId",
column: x => x.ArtifactGroupingId,
principalTable: "ArtifactGroupings",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_RelatedGroupings_ArtifactGroupings_RelatedArtifactGroupings~",
column: x => x.RelatedArtifactGroupingsId,
principalTable: "ArtifactGroupings",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_RelatedGroupings_RelatedArtifactGroupingsId",
table: "RelatedGroupings",
column: "RelatedArtifactGroupingsId");
}
}
}

View File

@@ -12,9 +12,9 @@ using OpenArchival.DataAccess;
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ArchiveDbContext))]
[Migration("20250806174205_NullableParentArtifactEntryId")]
partial class NullableParentArtifactEntryId
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250813015341_AutoGenKeysEnabled")]
partial class AutoGenKeysEnabled
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -26,6 +26,21 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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")
@@ -41,21 +56,6 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactEntryArtifactEntryTag");
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
{
b.Property<int>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("RelatedArtifactGroupingsId")
.HasColumnType("integer");
b.HasKey("ArtifactGroupingId", "RelatedArtifactGroupingsId");
b.HasIndex("RelatedArtifactGroupingsId");
b.ToTable("RelatedGroupings", (string)null);
});
modelBuilder.Entity("OpenArchival.DataAccess.ArchiveCategory", b =>
{
b.Property<int>("Id")
@@ -128,7 +128,7 @@ namespace OpenArchival.DataAccess.Migrations
b.Property<string>("FileTextContent")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
b.Property<bool>("IsPubliclyVisible")
.HasColumnType("boolean");
b.PrimitiveCollection<List<string>>("Links")
@@ -140,8 +140,8 @@ namespace OpenArchival.DataAccess.Migrations
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("StorageLocation")
.HasColumnType("text");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
@@ -151,6 +151,8 @@ namespace OpenArchival.DataAccess.Migrations
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
b.ToTable("ArtifactEntries");
});
@@ -207,7 +209,7 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactGroupings");
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactStorageLocation", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
@@ -215,25 +217,30 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FirstName")
b.Property<string>("Location")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactStorageLocations");
});
b.ToTable("ArtifactAssocaitedNames");
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.FilePathListing", b =>
@@ -262,6 +269,50 @@ namespace OpenArchival.DataAccess.Migrations
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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)
@@ -277,28 +328,21 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("ArtifactGroupingId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("RelatedArtifactGroupingsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
@@ -341,7 +385,16 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
@@ -352,15 +405,6 @@ namespace OpenArchival.DataAccess.Migrations
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");

View File

@@ -5,7 +5,7 @@
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class AllModelsFixedComparer : Migration
public partial class AutoGenKeysEnabled : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)

View File

@@ -0,0 +1,422 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250813023107_ChangedArtifactRelationshipsNew")]
partial class ChangedArtifactRelationshipsNew
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.7")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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("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("ArchiveCategory");
});
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<string>("ArtifactNumber")
.HasColumnType("text");
b.PrimitiveCollection<List<DateTime>>("AssociatedDates")
.HasColumnType("timestamp with time zone[]");
b.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
b.ToTable("ArtifactEntries");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.ToTable("ArtifactEntryTags");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany("ChildTags")
.HasForeignKey("ArtifactGroupingId");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
b.Navigation("ChildTags");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class ChangedArtifactRelationshipsNew : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

View File

@@ -12,9 +12,9 @@ using OpenArchival.DataAccess;
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ArchiveDbContext))]
[Migration("20250807132100_FixType")]
partial class FixType
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250813024912_RemovedDuplicateCategories")]
partial class RemovedDuplicateCategories
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -26,6 +26,21 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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")
@@ -41,21 +56,6 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactEntryArtifactEntryTag");
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
{
b.Property<int>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("RelatedArtifactGroupingsId")
.HasColumnType("integer");
b.HasKey("ArtifactGroupingId", "RelatedArtifactGroupingsId");
b.HasIndex("RelatedArtifactGroupingsId");
b.ToTable("RelatedGroupings", (string)null);
});
modelBuilder.Entity("OpenArchival.DataAccess.ArchiveCategory", b =>
{
b.Property<int>("Id")
@@ -128,7 +128,7 @@ namespace OpenArchival.DataAccess.Migrations
b.Property<string>("FileTextContent")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
b.Property<bool>("IsPubliclyVisible")
.HasColumnType("boolean");
b.PrimitiveCollection<List<string>>("Links")
@@ -164,17 +164,12 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.ToTable("ArtifactEntryTags");
});
@@ -226,7 +221,7 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactStorageLocations");
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactType", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
@@ -234,25 +229,13 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FirstName")
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssocaitedNames");
b.ToTable("ArtifactTypes");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
@@ -281,6 +264,50 @@ namespace OpenArchival.DataAccess.Migrations
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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)
@@ -296,21 +323,6 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("ArtifactGroupingId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("RelatedArtifactGroupingsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
@@ -328,13 +340,6 @@ namespace OpenArchival.DataAccess.Migrations
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany("ChildTags")
.HasForeignKey("ArtifactGroupingId");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
@@ -368,7 +373,16 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
@@ -379,15 +393,6 @@ namespace OpenArchival.DataAccess.Migrations
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
@@ -396,8 +401,6 @@ namespace OpenArchival.DataAccess.Migrations
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
b.Navigation("ChildTags");
});
#pragma warning restore 612, 618
}

View File

@@ -0,0 +1,48 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class RemovedDuplicateCategories : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactEntryTags_ArtifactGroupings_ArtifactGroupingId",
table: "ArtifactEntryTags");
migrationBuilder.DropIndex(
name: "IX_ArtifactEntryTags_ArtifactGroupingId",
table: "ArtifactEntryTags");
migrationBuilder.DropColumn(
name: "ArtifactGroupingId",
table: "ArtifactEntryTags");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "ArtifactGroupingId",
table: "ArtifactEntryTags",
type: "integer",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_ArtifactEntryTags_ArtifactGroupingId",
table: "ArtifactEntryTags",
column: "ArtifactGroupingId");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactEntryTags_ArtifactGroupings_ArtifactGroupingId",
table: "ArtifactEntryTags",
column: "ArtifactGroupingId",
principalTable: "ArtifactGroupings",
principalColumn: "Id");
}
}
}

View File

@@ -12,9 +12,9 @@ using OpenArchival.DataAccess;
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ArchiveDbContext))]
[Migration("20250807131954_AddStorageLocations")]
partial class AddStorageLocations
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250813025148_RemovedDuplicateCategoriesNew")]
partial class RemovedDuplicateCategoriesNew
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -26,6 +26,21 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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")
@@ -41,21 +56,6 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactEntryArtifactEntryTag");
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
{
b.Property<int>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("RelatedArtifactGroupingsId")
.HasColumnType("integer");
b.HasKey("ArtifactGroupingId", "RelatedArtifactGroupingsId");
b.HasIndex("RelatedArtifactGroupingsId");
b.ToTable("RelatedGroupings", (string)null);
});
modelBuilder.Entity("OpenArchival.DataAccess.ArchiveCategory", b =>
{
b.Property<int>("Id")
@@ -85,7 +85,7 @@ namespace OpenArchival.DataAccess.Migrations
b.HasKey("Id");
b.ToTable("ArchiveCategory");
b.ToTable("ArchiveCategories");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactDefect", b =>
@@ -128,7 +128,7 @@ namespace OpenArchival.DataAccess.Migrations
b.Property<string>("FileTextContent")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
b.Property<bool>("IsPubliclyVisible")
.HasColumnType("boolean");
b.PrimitiveCollection<List<string>>("Links")
@@ -164,17 +164,12 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.ToTable("ArtifactEntryTags");
});
@@ -226,7 +221,7 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactStorageLocations");
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactType", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
@@ -234,25 +229,13 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FirstName")
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssocaitedNames");
b.ToTable("ArtifactTypes");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
@@ -281,6 +264,50 @@ namespace OpenArchival.DataAccess.Migrations
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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)
@@ -296,21 +323,6 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("ArtifactGroupingId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("RelatedArtifactGroupingsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
@@ -328,13 +340,6 @@ namespace OpenArchival.DataAccess.Migrations
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany("ChildTags")
.HasForeignKey("ArtifactGroupingId");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
@@ -368,7 +373,16 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
@@ -379,15 +393,6 @@ namespace OpenArchival.DataAccess.Migrations
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
@@ -396,8 +401,6 @@ namespace OpenArchival.DataAccess.Migrations
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
b.Navigation("ChildTags");
});
#pragma warning restore 612, 618
}

View File

@@ -0,0 +1,68 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class RemovedDuplicateCategoriesNew : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactGroupings_ArchiveCategory_CategoryId",
table: "ArtifactGroupings");
migrationBuilder.DropPrimaryKey(
name: "PK_ArchiveCategory",
table: "ArchiveCategory");
migrationBuilder.RenameTable(
name: "ArchiveCategory",
newName: "ArchiveCategories");
migrationBuilder.AddPrimaryKey(
name: "PK_ArchiveCategories",
table: "ArchiveCategories",
column: "Id");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactGroupings_ArchiveCategories_CategoryId",
table: "ArtifactGroupings",
column: "CategoryId",
principalTable: "ArchiveCategories",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactGroupings_ArchiveCategories_CategoryId",
table: "ArtifactGroupings");
migrationBuilder.DropPrimaryKey(
name: "PK_ArchiveCategories",
table: "ArchiveCategories");
migrationBuilder.RenameTable(
name: "ArchiveCategories",
newName: "ArchiveCategory");
migrationBuilder.AddPrimaryKey(
name: "PK_ArchiveCategory",
table: "ArchiveCategory",
column: "Id");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactGroupings_ArchiveCategory_CategoryId",
table: "ArtifactGroupings",
column: "CategoryId",
principalTable: "ArchiveCategory",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -0,0 +1,659 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250813153226_AddAuthentication")]
partial class AddAuthentication
{
/// <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("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("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<string>("ArtifactNumber")
.HasColumnType("text");
b.PrimitiveCollection<List<DateTime>>("AssociatedDates")
.HasColumnType("timestamp with time zone[]");
b.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
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<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("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", "ParentArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,224 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class AddAuthentication : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "AspNetRoles",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
ConcurrencyStamp = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AspNetUsers",
columns: table => new
{
Id = table.Column<string>(type: "text", nullable: false),
PermissionLevel = table.Column<string>(type: "text", nullable: false),
UserName = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
NormalizedUserName = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
Email = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
NormalizedEmail = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
EmailConfirmed = table.Column<bool>(type: "boolean", nullable: false),
PasswordHash = table.Column<string>(type: "text", nullable: true),
SecurityStamp = table.Column<string>(type: "text", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "text", nullable: true),
PhoneNumber = table.Column<string>(type: "text", nullable: true),
PhoneNumberConfirmed = table.Column<bool>(type: "boolean", nullable: false),
TwoFactorEnabled = table.Column<bool>(type: "boolean", nullable: false),
LockoutEnd = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true),
LockoutEnabled = table.Column<bool>(type: "boolean", nullable: false),
AccessFailedCount = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUsers", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AspNetRoleClaims",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
RoleId = table.Column<string>(type: "text", nullable: false),
ClaimType = table.Column<string>(type: "text", nullable: true),
ClaimValue = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id);
table.ForeignKey(
name: "FK_AspNetRoleClaims_AspNetRoles_RoleId",
column: x => x.RoleId,
principalTable: "AspNetRoles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserClaims",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column<string>(type: "text", nullable: false),
ClaimType = table.Column<string>(type: "text", nullable: true),
ClaimValue = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserClaims", x => x.Id);
table.ForeignKey(
name: "FK_AspNetUserClaims_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserLogins",
columns: table => new
{
LoginProvider = table.Column<string>(type: "text", nullable: false),
ProviderKey = table.Column<string>(type: "text", nullable: false),
ProviderDisplayName = table.Column<string>(type: "text", nullable: true),
UserId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey });
table.ForeignKey(
name: "FK_AspNetUserLogins_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserRoles",
columns: table => new
{
UserId = table.Column<string>(type: "text", nullable: false),
RoleId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId });
table.ForeignKey(
name: "FK_AspNetUserRoles_AspNetRoles_RoleId",
column: x => x.RoleId,
principalTable: "AspNetRoles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_AspNetUserRoles_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserTokens",
columns: table => new
{
UserId = table.Column<string>(type: "text", nullable: false),
LoginProvider = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Value = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name });
table.ForeignKey(
name: "FK_AspNetUserTokens_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_AspNetRoleClaims_RoleId",
table: "AspNetRoleClaims",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "RoleNameIndex",
table: "AspNetRoles",
column: "NormalizedName",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUserClaims_UserId",
table: "AspNetUserClaims",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_AspNetUserLogins_UserId",
table: "AspNetUserLogins",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_AspNetUserRoles_RoleId",
table: "AspNetUserRoles",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "EmailIndex",
table: "AspNetUsers",
column: "NormalizedEmail");
migrationBuilder.CreateIndex(
name: "UserNameIndex",
table: "AspNetUsers",
column: "NormalizedUserName",
unique: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AspNetRoleClaims");
migrationBuilder.DropTable(
name: "AspNetUserClaims");
migrationBuilder.DropTable(
name: "AspNetUserLogins");
migrationBuilder.DropTable(
name: "AspNetUserRoles");
migrationBuilder.DropTable(
name: "AspNetUserTokens");
migrationBuilder.DropTable(
name: "AspNetRoles");
migrationBuilder.DropTable(
name: "AspNetUsers");
}
}
}

View File

@@ -0,0 +1,659 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250828154443_AddedParentEntry")]
partial class AddedParentEntry
{
/// <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("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("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<string>("ArtifactNumber")
.HasColumnType("text");
b.PrimitiveCollection<List<DateTime>>("AssociatedDates")
.HasColumnType("timestamp with time zone[]");
b.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
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<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("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", "ParentArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class AddedParentEntry : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

View File

@@ -0,0 +1,672 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250828173516_AddedCascade")]
partial class AddedCascade
{
/// <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("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("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.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
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<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("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.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany()
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ArtifactGrouping");
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,50 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class AddedCascade : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "ArtifactGroupingId",
table: "ArtifactEntries",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.CreateIndex(
name: "IX_ArtifactEntries_ArtifactGroupingId",
table: "ArtifactEntries",
column: "ArtifactGroupingId");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactEntries_ArtifactGroupings_ArtifactGroupingId",
table: "ArtifactEntries",
column: "ArtifactGroupingId",
principalTable: "ArtifactGroupings",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactEntries_ArtifactGroupings_ArtifactGroupingId",
table: "ArtifactEntries");
migrationBuilder.DropIndex(
name: "IX_ArtifactEntries_ArtifactGroupingId",
table: "ArtifactEntries");
migrationBuilder.DropColumn(
name: "ArtifactGroupingId",
table: "ArtifactEntries");
}
}
}

View File

@@ -0,0 +1,672 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250829171154_UniqueRowsSet")]
partial class UniqueRowsSet
{
/// <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("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("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.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
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<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("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.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany()
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ArtifactGrouping");
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -5,7 +5,7 @@
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class FixType : Migration
public partial class UniqueRowsSet : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)

View File

@@ -0,0 +1,672 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250829182114_FixedCascadeDelete")]
partial class FixedCascadeDelete
{
/// <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("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("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.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("StorageLocationId");
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<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("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.ArtifactGrouping", "ParentArtifactGrouping")
.WithMany()
.HasForeignKey("ParentArtifactGroupingId");
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ArtifactGrouping");
b.Navigation("ParentArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class FixedCascadeDelete : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

View File

@@ -0,0 +1,661 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250829182730_fixedduplicateprop")]
partial class fixedduplicateprop
{
/// <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("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("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.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
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.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.HasIndex("StorageLocationId");
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<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
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>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("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()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.HasOne("OpenArchival.DataAccess.ArchiveCategory", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Files");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,48 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class fixedduplicateprop : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactEntries_ArtifactGroupings_ParentArtifactGroupingId",
table: "ArtifactEntries");
migrationBuilder.DropIndex(
name: "IX_ArtifactEntries_ParentArtifactGroupingId",
table: "ArtifactEntries");
migrationBuilder.DropColumn(
name: "ParentArtifactGroupingId",
table: "ArtifactEntries");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "ParentArtifactGroupingId",
table: "ArtifactEntries",
type: "integer",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_ArtifactEntries_ParentArtifactGroupingId",
table: "ArtifactEntries",
column: "ParentArtifactGroupingId");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactEntries_ArtifactGroupings_ParentArtifactGroupingId",
table: "ArtifactEntries",
column: "ParentArtifactGroupingId",
principalTable: "ArtifactGroupings",
principalColumn: "Id");
}
}
}

View File

@@ -0,0 +1,677 @@
// <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 OpenArchival.DataAccess;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20250829200117_deduplicationadded")]
partial class deduplicationadded
{
/// <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("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("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<int?>("ArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactEntryId");
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>("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<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<bool>("IsPublicallyVisible")
.HasColumnType("boolean");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Type")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.ToTable("ArtifactGroupings");
});
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.FilePathListing", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("OriginalName")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactFilePaths");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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("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.ArtifactDefect", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
.WithMany("Defects")
.HasForeignKey("ArtifactEntryId");
});
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()
.HasForeignKey("StorageLocationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactType", "Type")
.WithMany()
.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.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();
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("Files")
.HasForeignKey("ParentArtifactEntryId");
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("ListedNames")
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Defects");
b.Navigation("Files");
b.Navigation("ListedNames");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,132 @@
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenArchival.DataAccess.Migrations
{
/// <inheritdoc />
public partial class deduplicationadded : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Defects",
table: "ArtifactEntries");
migrationBuilder.DropColumn(
name: "ListedNames",
table: "ArtifactEntries");
migrationBuilder.DropColumn(
name: "FirstName",
table: "ArtifactAssociatedNames");
migrationBuilder.DropColumn(
name: "Title",
table: "ArtifactAssociatedNames");
migrationBuilder.RenameColumn(
name: "LastName",
table: "ArtifactAssociatedNames",
newName: "Value");
migrationBuilder.AddColumn<int>(
name: "TypeId",
table: "ArtifactEntries",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "ArtifactEntryId",
table: "ArtifactDefects",
type: "integer",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_ArtifactEntries_TypeId",
table: "ArtifactEntries",
column: "TypeId");
migrationBuilder.CreateIndex(
name: "IX_ArtifactDefects_ArtifactEntryId",
table: "ArtifactDefects",
column: "ArtifactEntryId");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactDefects_ArtifactEntries_ArtifactEntryId",
table: "ArtifactDefects",
column: "ArtifactEntryId",
principalTable: "ArtifactEntries",
principalColumn: "Id");
migrationBuilder.AddForeignKey(
name: "FK_ArtifactEntries_ArtifactTypes_TypeId",
table: "ArtifactEntries",
column: "TypeId",
principalTable: "ArtifactTypes",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_ArtifactDefects_ArtifactEntries_ArtifactEntryId",
table: "ArtifactDefects");
migrationBuilder.DropForeignKey(
name: "FK_ArtifactEntries_ArtifactTypes_TypeId",
table: "ArtifactEntries");
migrationBuilder.DropIndex(
name: "IX_ArtifactEntries_TypeId",
table: "ArtifactEntries");
migrationBuilder.DropIndex(
name: "IX_ArtifactDefects_ArtifactEntryId",
table: "ArtifactDefects");
migrationBuilder.DropColumn(
name: "TypeId",
table: "ArtifactEntries");
migrationBuilder.DropColumn(
name: "ArtifactEntryId",
table: "ArtifactDefects");
migrationBuilder.RenameColumn(
name: "Value",
table: "ArtifactAssociatedNames",
newName: "LastName");
migrationBuilder.AddColumn<List<string>>(
name: "Defects",
table: "ArtifactEntries",
type: "text[]",
nullable: true);
migrationBuilder.AddColumn<List<string>>(
name: "ListedNames",
table: "ArtifactEntries",
type: "text[]",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "FirstName",
table: "ArtifactAssociatedNames",
type: "text",
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "Title",
table: "ArtifactAssociatedNames",
type: "text",
nullable: true);
}
}
}

View File

@@ -11,18 +11,33 @@ using OpenArchival.DataAccess;
namespace OpenArchival.DataAccess.Migrations
{
[DbContext(typeof(ArchiveDbContext))]
[DbContext(typeof(ApplicationDbContext))]
partial class ArchiveDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.7")
.HasAnnotation("ProductVersion", "9.0.8")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
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")
@@ -38,19 +53,204 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactEntryArtifactEntryTag");
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<int>("ArtifactGroupingId")
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");
b.Property<int>("RelatedArtifactGroupingsId")
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");
b.HasKey("ArtifactGroupingId", "RelatedArtifactGroupingsId");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.HasIndex("RelatedArtifactGroupingsId");
b.Property<string>("ClaimType")
.HasColumnType("text");
b.ToTable("RelatedGroupings", (string)null);
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 =>
@@ -82,7 +282,7 @@ namespace OpenArchival.DataAccess.Migrations
b.HasKey("Id");
b.ToTable("ArchiveCategory");
b.ToTable("ArchiveCategories");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactDefect", b =>
@@ -93,12 +293,17 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactEntryId");
b.ToTable("ArtifactDefects");
});
@@ -110,15 +315,15 @@ namespace OpenArchival.DataAccess.Migrations
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.PrimitiveCollection<List<string>>("Defects")
.HasColumnType("text[]");
b.Property<string>("Description")
.HasColumnType("text");
@@ -131,12 +336,6 @@ namespace OpenArchival.DataAccess.Migrations
b.PrimitiveCollection<List<string>>("Links")
.HasColumnType("text[]");
b.PrimitiveCollection<List<string>>("ListedNames")
.HasColumnType("text[]");
b.Property<int?>("ParentArtifactGroupingId")
.HasColumnType("integer");
b.Property<int>("StorageLocationId")
.HasColumnType("integer");
@@ -144,12 +343,17 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired()
.HasColumnType("text");
b.Property<int>("TypeId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("ParentArtifactGroupingId");
b.HasIndex("ArtifactGroupingId");
b.HasIndex("StorageLocationId");
b.HasIndex("TypeId");
b.ToTable("ArtifactEntries");
});
@@ -161,17 +365,12 @@ namespace OpenArchival.DataAccess.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int?>("ArtifactGroupingId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ArtifactGroupingId");
b.ToTable("ArtifactEntryTags");
});
@@ -240,35 +439,6 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactTypes");
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Title")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.Property<int>("Id")
@@ -295,6 +465,43 @@ namespace OpenArchival.DataAccess.Migrations
b.ToTable("ArtifactFilePaths");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("ParentArtifactEntryId")
.HasColumnType("integer");
b.Property<string>("Value")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ParentArtifactEntryId");
b.ToTable("ArtifactAssociatedNames");
});
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)
@@ -310,26 +517,71 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("ArtifactGroupingArtifactGrouping", b =>
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("ArtifactGroupingId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany()
.HasForeignKey("RelatedArtifactGroupingsId")
.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.ArtifactDefect", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", null)
.WithMany("Defects")
.HasForeignKey("ArtifactEntryId");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ParentArtifactGrouping")
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", "ArtifactGrouping")
.WithMany("ChildArtifactEntries")
.HasForeignKey("ParentArtifactGroupingId");
.HasForeignKey("ArtifactGroupingId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OpenArchival.DataAccess.ArtifactStorageLocation", "StorageLocation")
.WithMany()
@@ -337,16 +589,17 @@ namespace OpenArchival.DataAccess.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactGrouping");
b.HasOne("OpenArchival.DataAccess.ArtifactType", "Type")
.WithMany()
.HasForeignKey("TypeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ArtifactGrouping");
b.Navigation("StorageLocation");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntryTag", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactGrouping", null)
.WithMany("ChildTags")
.HasForeignKey("ArtifactGroupingId");
b.Navigation("Type");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
@@ -382,17 +635,6 @@ namespace OpenArchival.DataAccess.Migrations
.IsRequired();
});
modelBuilder.Entity("OpenArchival.DataAccess.AssociatedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany()
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.FilePathListing", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
@@ -402,16 +644,29 @@ namespace OpenArchival.DataAccess.Migrations
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ListedName", b =>
{
b.HasOne("OpenArchival.DataAccess.ArtifactEntry", "ParentArtifactEntry")
.WithMany("ListedNames")
.HasForeignKey("ParentArtifactEntryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ParentArtifactEntry");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactEntry", b =>
{
b.Navigation("Defects");
b.Navigation("Files");
b.Navigation("ListedNames");
});
modelBuilder.Entity("OpenArchival.DataAccess.ArtifactGrouping", b =>
{
b.Navigation("ChildArtifactEntries");
b.Navigation("ChildTags");
});
#pragma warning restore 612, 618
}

View File

@@ -0,0 +1,9 @@
using Microsoft.AspNetCore.Identity;
namespace OpenArchival.DataAccess;
// Add profile data for application users by adding properties to the ApplicationUser class
public class ApplicationUser : IdentityUser
{
public string PermissionLevel { get; set; } = "";
}

View File

@@ -1,12 +1,14 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace OpenArchival.DataAccess;
public class ArchiveCategory
{
[Key]
public int? Id { get; set; }
public int Id { get; set; }
[System.ComponentModel.DataAnnotations.Schema.Index(IsUnique =true)]
public required string Name { get; set; }
public string? Description { get; set; }

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -10,7 +11,9 @@ namespace OpenArchival.DataAccess;
public class ArtifactDefect
{
[Key]
public required int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Index(IsUnique = true)]
public required string Description { get; set; }
}

View File

@@ -1,11 +1,14 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
namespace OpenArchival.DataAccess;
public class ArtifactEntry
{
[Key]
public required int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
/// <summary>
/// This value gets appended on the end of the contianing ArtifactGrouping's
@@ -15,8 +18,8 @@ public class ArtifactEntry
{
get
{
return (ParentArtifactGrouping is not null)
? ModelHelpers.MakeIdentifier(ParentArtifactGrouping.IdentifierFields.Values, ParentArtifactGrouping.Category.FieldSeparator, ArtifactNumber)
return (ArtifactGrouping is not null)
? ModelHelpers.MakeIdentifier(ArtifactGrouping.IdentifierFields.Values, ArtifactGrouping.Category.FieldSeparator, ArtifactNumber)
: null;
}
}
@@ -29,25 +32,64 @@ public class ArtifactEntry
public required ArtifactStorageLocation StorageLocation { get; set; }
public List<ArtifactEntryTag>? Tags { get; set; }
public List<ArtifactEntryTag>? Tags { get; set; } = [];
public List<string>? ListedNames { get; set; }
public List<ListedName>? ListedNames { get; set; } = [];
public List<DateTime>? AssociatedDates { get; set; }
public List<DateTime>? AssociatedDates { get; set; } = [];
public List<ArtifactDefect>? Defects { get; set; } = [];
public List<string>? Links { get; set; } = [];
public List<string>? Defects { get; set; }
public required List<FilePathListing> Files { get; set; } = [];
public List<string>? Links { get; set; }
public ArtifactGrouping? ParentArtifactGrouping { get; set; }
public string? FileTextContent { get; set; } = null;
public required List<FilePathListing> Files { get; set; }
/// <summary>
/// Maps the file name to the textual contents of the file
/// </summary>
public Dictionary<string, string>? FileTextContent { get; set; } = null;
public required ArtifactType Type { get; set; }
public bool IsPubliclyVisible { get; set; }
// Relationships this artifact has TO other artifacts
public List<ArtifactEntry> RelatedTo { get; set; } = [];
// Relationships other artifacts have TO this artifact
public List<ArtifactEntry> RelatedBy { get; set; } = [];
public int ArtifactGroupingId { get; set; }
public required ArtifactGrouping ArtifactGrouping { get; set; }
public override string ToString()
{
var sb = new StringBuilder();
sb.AppendLine($"--- ArtifactEntry (ID: {Id}) ---");
sb.AppendLine($" Title: {Title}");
sb.AppendLine($" ArtifactIdentifier: {ArtifactIdentifier ?? "N/A"}");
sb.AppendLine($" ArtifactNumber: {ArtifactNumber ?? "N/A"}");
sb.AppendLine($" StorageLocation: {StorageLocation}"); // Assumes ArtifactStorageLocation has a useful ToString()
sb.AppendLine($" IsPubliclyVisible: {IsPubliclyVisible}");
// Handle Description (it could be long, so you might truncate it if needed)
sb.AppendLine($" Description: {(string.IsNullOrWhiteSpace(Description) ? "N/A" : Description)}");
// Handle Lists
sb.AppendLine($" Tags: {(Tags is not null && Tags.Any() ? string.Join(", ", Tags) : "None")}");
sb.AppendLine($" ListedNames: {(ListedNames is not null && ListedNames.Any() ? string.Join(", ", ListedNames) : "None")}");
sb.AppendLine($" AssociatedDates: {(AssociatedDates is not null && AssociatedDates.Any() ? string.Join(", ", AssociatedDates.Select(d => d.ToShortDateString())) : "None")}");
sb.AppendLine($" Defects: {(Defects is not null && Defects.Any() ? string.Join(", ", Defects) : "None")}");
sb.AppendLine($" Links: {(Links is not null && Links.Any() ? string.Join(", ", Links) : "None")}");
sb.AppendLine($" Files: {(Files is not null && Files.Any() ? string.Join(", ", Files) : "None")}");
// Handle potentially very large text content
sb.AppendLine($" FileTextContent: {(string.IsNullOrEmpty(FileTextContent) ? "Not Present" : $"Present (Length: {FileTextContent.Length})")}");
sb.Append("--------------------------");
return sb.ToString();
}
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -10,9 +11,11 @@ namespace OpenArchival.DataAccess;
public class ArtifactEntryTag
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Index(IsUnique = true)]
public required string Name { get; set; }
public List<ArtifactEntry>? ArtifactEntries { get; set; }
public List<ArtifactEntry>? ArtifactEntries { get; set; } = [];
}

View File

@@ -1,12 +1,15 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Diagnostics.CodeAnalysis;
using System.Text;
namespace OpenArchival.DataAccess;
public class ArtifactGrouping
{
[Key]
public required int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string? ArtifactGroupingIdentifier
{
@@ -32,7 +35,6 @@ public class ArtifactGrouping
}
}
public required List<ArtifactEntry> ChildArtifactEntries { get; set; } = new();
public required string Title { get; set; }
@@ -40,10 +42,33 @@ public class ArtifactGrouping
public string? Type { get; set; }
public List<ArtifactGrouping>? RelatedArtifactGroupings { get; set; }
public bool IsPublicallyVisible { get; set; }
public required List<ArtifactEntry> ChildArtifactEntries { get; set; } = new();
public override string ToString()
{
var sb = new StringBuilder();
sb.AppendLine($"Id: {Id}");
sb.AppendLine($"Artifact Grouping Identifier: {ArtifactGroupingIdentifier}");
sb.AppendLine($"Category:");
sb.AppendLine(Category.ToString());
sb.AppendLine($"Title: {Title}");
sb.AppendLine($"Description: {Description}");
sb.AppendLine($"Type:{Type}");
sb.AppendLine($"Publically Visible: {IsPublicallyVisible}");
sb.AppendLine($"Artifact Entries:");
foreach (var artifact in ChildArtifactEntries)
{
sb.AppendLine(artifact.ToString());
sb.AppendLine();
}
return sb.ToString();
}
[NotMapped]
public IEnumerable<ArtifactEntryTag> ChildTags
{
get

View File

@@ -1,11 +1,14 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace OpenArchival.DataAccess;
public class ArtifactStorageLocation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[System.ComponentModel.DataAnnotations.Schema.Index(IsUnique =true)]
public required string Location { get; set; }
}

View File

@@ -1,11 +1,14 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace OpenArchival.DataAccess;
public class ArtifactType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[System.ComponentModel.DataAnnotations.Schema.Index(IsUnique =true)]
public required string Name { get; set; }
}

View File

@@ -1,16 +1,16 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace OpenArchival.DataAccess;
public class FilePathListing
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public ArtifactEntry? ParentArtifactEntry { get; set; }
public int? ParentArtifactEntryId { get; set; }
public required string OriginalName { get; set; }
public required string Path { get; set; }

View File

@@ -1,17 +1,15 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace OpenArchival.DataAccess;
public class ListedName
{
[Key]
public required int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public required ArtifactEntry ParentArtifactEntry { get; set; }
public string? Title { get; set; }
public required string FirstName { get; set; }
public required string LastName { get; set; }
public required string Value { get; set; }
}

View File

@@ -8,12 +8,13 @@
<ItemGroup>
<PackageReference Include="EntityFramework" Version="6.5.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.7">
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="9.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.8">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.7" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.8" />
<PackageReference Include="Npgsql" Version="9.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
</ItemGroup>

View File

@@ -18,7 +18,7 @@ static class Program
var connectionString = builder.Configuration.GetConnectionString("PostgresConnection");
// Add the DbContext to the dependency injection container
builder.Services.AddDbContext<ArchiveDbContext>(options =>
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(connectionString));
var app = builder.Build();

View File

@@ -5,11 +5,11 @@ namespace OpenArchival.DataAccess;
public class ArchiveCategoryProvider : IArchiveCategoryProvider
{
private Microsoft.EntityFrameworkCore.IDbContextFactory<ArchiveDbContext> _dbFactory;
private Microsoft.EntityFrameworkCore.IDbContextFactory<ApplicationDbContext> _dbFactory;
private ILogger _logger;
[SetsRequiredMembers]
public ArchiveCategoryProvider(Microsoft.EntityFrameworkCore.IDbContextFactory<ArchiveDbContext> dbFactory, ILogger<ArchiveCategoryProvider> logger)
public ArchiveCategoryProvider(Microsoft.EntityFrameworkCore.IDbContextFactory<ApplicationDbContext> dbFactory, ILogger<ArchiveCategoryProvider> logger)
{
_dbFactory = dbFactory;
_logger = logger;

View File

@@ -5,11 +5,11 @@ namespace OpenArchival.DataAccess;
public class ArchiveEntryTagProvider : IArchiveEntryTagProvider
{
private readonly IDbContextFactory<ArchiveDbContext> _dbFactory;
private readonly IDbContextFactory<ApplicationDbContext> _dbFactory;
private readonly ILogger<ArchiveEntryTagProvider> _logger;
[SetsRequiredMembers]
public ArchiveEntryTagProvider(IDbContextFactory<ArchiveDbContext> context, ILogger<ArchiveEntryTagProvider> logger)
public ArchiveEntryTagProvider(IDbContextFactory<ApplicationDbContext> context, ILogger<ArchiveEntryTagProvider> logger)
{
_dbFactory = context;
_logger = logger;

View File

@@ -6,11 +6,11 @@ namespace OpenArchival.DataAccess;
public class ArtifactDefectProvider : IArtifactDefectProvider
{
private readonly IDbContextFactory<ArchiveDbContext> _dbFactory;
private readonly IDbContextFactory<ApplicationDbContext> _dbFactory;
private readonly ILogger<ArtifactDefectProvider> _logger;
[SetsRequiredMembers]
public ArtifactDefectProvider(IDbContextFactory<ArchiveDbContext> context, ILogger<ArtifactDefectProvider> logger)
public ArtifactDefectProvider(IDbContextFactory<ApplicationDbContext> context, ILogger<ArtifactDefectProvider> logger)
{
_dbFactory = context;
_logger = logger;

View File

@@ -6,11 +6,11 @@ namespace OpenArchival.DataAccess;
public class ArtifactGroupingProvider : IArtifactGroupingProvider
{
private readonly ArchiveDbContext _context;
private readonly ApplicationDbContext _context;
private readonly ILogger<ArtifactGroupingProvider> _logger;
[SetsRequiredMembers]
public ArtifactGroupingProvider(ArchiveDbContext context, ILogger<ArtifactGroupingProvider> logger)
public ArtifactGroupingProvider(ApplicationDbContext context, ILogger<ArtifactGroupingProvider> logger)
{
_context = context;
_logger = logger;
@@ -18,12 +18,18 @@ public class ArtifactGroupingProvider : IArtifactGroupingProvider
public async Task<ArtifactGrouping?> GetGroupingAsync(int id)
{
return await _context.ArtifactGroupings.Where(g => g.Id == id).FirstOrDefaultAsync();
return await _context.ArtifactGroupings
.Where(g => g.Id == id)
.Include(g => g.Category)
.FirstOrDefaultAsync();
}
public async Task<ArtifactGrouping?> GetGroupingAsync(string artifactGroupingIdentifier)
{
return await _context.ArtifactGroupings.Where(g => g.ArtifactGroupingIdentifier == artifactGroupingIdentifier).FirstOrDefaultAsync();
return await _context.ArtifactGroupings
.Where(g => g.ArtifactGroupingIdentifier == artifactGroupingIdentifier)
.Include(g => g.Category)
.FirstOrDefaultAsync();
}
public async Task CreateGroupingAsync(ArtifactGrouping grouping)
@@ -38,9 +44,37 @@ public class ArtifactGroupingProvider : IArtifactGroupingProvider
await _context.SaveChangesAsync();
}
public async Task DeleteGroupingAsync(int id)
{
await _context.ArtifactGroupings
.Where(p => p.Id == id)
.ExecuteDeleteAsync();
await _context.SaveChangesAsync();
}
public async Task DeleteGroupingAsync(ArtifactGrouping grouping)
{
_context.ArtifactGroupings.Remove(grouping);
await _context.SaveChangesAsync();
}
public async Task<List<ArtifactGrouping>> GetGroupingsPaged(int pageNumber, int resultsCount)
{
if (pageNumber < 1 || resultsCount < 1)
{
throw new ArgumentOutOfRangeException($"Either page number or number of results was less than or equal to 0. {nameof(pageNumber)}={pageNumber} {nameof(resultsCount)}={resultsCount}");
}
var totalCount = await _context.ArtifactGroupings.CountAsync();
var items = await _context.ArtifactGroupings
.Include(g => g.Category)
.OrderBy(g => g.Id)
.Skip((pageNumber - 1) * resultsCount)
.Take(resultsCount)
.ToListAsync();
return items;
}
}

View File

@@ -9,11 +9,11 @@ namespace OpenArchival.DataAccess;
public class ArtifactStorageLocationProvider : IArtifactStorageLocationProvider
{
private readonly IDbContextFactory<ArchiveDbContext> _dbFactory;
private readonly IDbContextFactory<ApplicationDbContext> _dbFactory;
private readonly ILogger _logger;
[SetsRequiredMembers]
public ArtifactStorageLocationProvider(IDbContextFactory<ArchiveDbContext> dbFactory, ILogger<ArtifactStorageLocationProvider> logger)
public ArtifactStorageLocationProvider(IDbContextFactory<ApplicationDbContext> dbFactory, ILogger<ArtifactStorageLocationProvider> logger)
{
_dbFactory = dbFactory;
_logger = logger;
@@ -68,17 +68,66 @@ public class ArtifactStorageLocationProvider : IArtifactStorageLocationProvider
{
await using var context = await _dbFactory.CreateDbContextAsync();
return await context.ArtifactStorageLocations
.Where(p => p.Location.ToLower().Contains(query.ToLower())).ToListAsync();
// STEP 1: Get the unique location STRINGS that match the search query.
// This simple query is guaranteed to be translated correctly by EF Core.
var uniqueMatchingNames = await context.ArtifactStorageLocations
.Where(p => p.Location.ToLower().Contains(query.ToLower()))
.Select(p => p.Location)
.Distinct()
.ToListAsync();
// If no names matched, return an empty list immediately.
if (uniqueMatchingNames is null || !uniqueMatchingNames.Any())
{
return new List<ArtifactStorageLocation>();
}
// STEP 2: Now, fetch the full objects that correspond to the unique names.
var matchingLocations = await context.ArtifactStorageLocations
.Where(p => uniqueMatchingNames.Contains(p.Location))
.ToListAsync();
// STEP 3: Perform a final DistinctBy on the small in-memory list to ensure
// a clean result set with one object per location name.
var finalResults = matchingLocations
.DistinctBy(p => p.Location)
.OrderBy(p => p.Location) // Optional: Orders the final search results
.ToList();
return finalResults;
}
public async Task<List<ArtifactStorageLocation>?> Top(int count)
{
await using var context = await _dbFactory.CreateDbContextAsync();
return await context.ArtifactStorageLocations
.OrderBy(p => p.Location)
// STEP 1: Get a unique, ordered list of the TOP N location *strings*.
// This is a simple query that EF Core can always translate correctly.
var uniqueLocationNames = await context.ArtifactStorageLocations
.Select(p => p.Location)
.Distinct()
.OrderBy(locationName => locationName)
.Take(count)
.ToListAsync();
if (uniqueLocationNames is null || !uniqueLocationNames.Any())
{
return new List<ArtifactStorageLocation>();
}
// STEP 2: Fetch all the full ArtifactStorageLocation objects that match the unique names.
// We use the list from Step 1 to create a 'WHERE IN (...)' clause.
var matchingLocations = await context.ArtifactStorageLocations
.Where(p => uniqueLocationNames.Contains(p.Location))
.ToListAsync();
// STEP 3: The previous query might fetch duplicates (e.g., two entries for "Box A").
// We now perform the final DistinctBy in-memory, which is guaranteed to work.
var finalResults = matchingLocations
.DistinctBy(p => p.Location)
.OrderBy(p => p.Location) // Re-apply ordering to the final list
.ToList();
return finalResults;
}
}

View File

@@ -6,11 +6,11 @@ namespace OpenArchival.DataAccess;
public class ArtifactTypeProvider : IArtifactTypeProvider
{
private readonly IDbContextFactory<ArchiveDbContext> _dbFactory;
private readonly IDbContextFactory<ApplicationDbContext> _dbFactory;
private readonly ILogger<ArtifactTypeProvider> _logger;
[SetsRequiredMembers]
public ArtifactTypeProvider(IDbContextFactory<ArchiveDbContext> dbFactory, ILogger<ArtifactTypeProvider> logger)
public ArtifactTypeProvider(IDbContextFactory<ApplicationDbContext> dbFactory, ILogger<ArtifactTypeProvider> logger)
{
_dbFactory = dbFactory;
_logger = logger;

View File

@@ -5,11 +5,11 @@ namespace OpenArchival.DataAccess;
public class FilePathListingProvider : IFilePathListingProvider
{
private readonly ArchiveDbContext _context;
private readonly ApplicationDbContext _context;
private readonly ILogger<FilePathListingProvider> _logger;
[SetsRequiredMembers]
public FilePathListingProvider(ArchiveDbContext context, ILogger<FilePathListingProvider> logger)
public FilePathListingProvider(ApplicationDbContext context, ILogger<FilePathListingProvider> logger)
{
_context = context;
_logger = logger;

View File

@@ -6,5 +6,7 @@ public interface IArtifactGroupingProvider
Task<ArtifactGrouping?> GetGroupingAsync(string artifactGroupingIdentifier);
Task CreateGroupingAsync(ArtifactGrouping grouping);
Task UpdateGroupingAsync(ArtifactGrouping grouping);
Task DeleteGroupingAsync(int id);
Task DeleteGroupingAsync(ArtifactGrouping grouping);
Task<List<ArtifactGrouping>> GetGroupingsPaged(int pageNumber, int resultsCount);
}

View File

@@ -3,7 +3,7 @@
public interface IListedNameProvider
{
Task<ListedName?> GetAssociatedNameAsync(int id);
Task<List<ListedName>?> GetAssociatedNamesAsync(string firstName, string lastName);
Task<List<ListedName>?> GetAssociatedNamesAsync(string name);
Task CreateAssociatedNameAsync(ListedName associatedName);
Task UpdateAssociatedNameAsync(ListedName associatedName);
Task DeleteAssociatedNameAsync(ListedName associatedName);

View File

@@ -6,11 +6,11 @@ namespace OpenArchival.DataAccess;
public class ListedNameProvider : IListedNameProvider
{
private readonly IDbContextFactory<ArchiveDbContext> _dbFactory;
private readonly IDbContextFactory<ApplicationDbContext> _dbFactory;
private readonly ILogger<ListedNameProvider> _logger;
[SetsRequiredMembers]
public ListedNameProvider(IDbContextFactory<ArchiveDbContext> context, ILogger<ListedNameProvider> logger)
public ListedNameProvider(IDbContextFactory<ApplicationDbContext> context, ILogger<ListedNameProvider> logger)
{
_dbFactory = context;
_logger = logger;
@@ -23,12 +23,12 @@ public class ListedNameProvider : IListedNameProvider
return await context.ArtifactAssociatedNames.Where(n => n.Id == id).FirstOrDefaultAsync();
}
public async Task<List<ListedName>?> GetAssociatedNamesAsync(string firstName, string lastName)
public async Task<List<ListedName>?> GetAssociatedNamesAsync(string name)
{
await using var context = await _dbFactory.CreateDbContextAsync();
return await context.ArtifactAssociatedNames
.Where(n => n.FirstName == firstName && n.LastName == lastName)
.Where(n => n.Value == name)
.ToListAsync();
}
@@ -63,7 +63,7 @@ public class ListedNameProvider : IListedNameProvider
var lowerCaseQuery = query.ToLower();
return await context.ArtifactAssociatedNames
.Where(p => (p.FirstName + " " + p.LastName).ToLower().Contains(lowerCaseQuery))
.Where(p => p.Value.ToLower().Contains(lowerCaseQuery))
.ToListAsync();
}
@@ -72,7 +72,7 @@ public class ListedNameProvider : IListedNameProvider
await using var context = await _dbFactory.CreateDbContextAsync();
return await context.ArtifactAssociatedNames
.OrderBy(p => p.FirstName)
.OrderBy(p => p.Value)
.Take(count)
.ToListAsync();
}

View File

@@ -9,9 +9,10 @@
"OpenArchival.DataAccess/1.0.0": {
"dependencies": {
"EntityFramework": "6.5.1",
"Microsoft.EntityFrameworkCore": "9.0.7",
"Microsoft.EntityFrameworkCore.Design": "9.0.7",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7",
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "9.0.8",
"Microsoft.EntityFrameworkCore": "9.0.8",
"Microsoft.EntityFrameworkCore.Design": "9.0.8",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
"Npgsql": "9.0.3",
"Npgsql.EntityFrameworkCore.PostgreSQL": "9.0.4"
},
@@ -46,6 +47,37 @@
}
}
},
"Microsoft.AspNetCore.Cryptography.Internal/9.0.8": {
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Cryptography.Internal.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.825.36808"
}
}
},
"Microsoft.AspNetCore.Cryptography.KeyDerivation/9.0.8": {
"dependencies": {
"Microsoft.AspNetCore.Cryptography.Internal": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.825.36808"
}
}
},
"Microsoft.AspNetCore.Identity.EntityFrameworkCore/9.0.8": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "9.0.8",
"Microsoft.Extensions.Identity.Stores": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll": {
"assemblyVersion": "9.0.8.0",
"fileVersion": "9.0.825.36808"
}
}
},
"Microsoft.Bcl.AsyncInterfaces/7.0.0": {
"runtime": {
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
@@ -288,7 +320,7 @@
"Microsoft.Build.Framework": "17.8.3",
"Microsoft.CodeAnalysis.Common": "4.8.0",
"Microsoft.CodeAnalysis.Workspaces.Common": "4.8.0",
"System.Text.Json": "9.0.7"
"System.Text.Json": "9.0.8"
},
"runtime": {
"lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": {
@@ -343,30 +375,30 @@
}
},
"Microsoft.CSharp/4.7.0": {},
"Microsoft.EntityFrameworkCore/9.0.7": {
"Microsoft.EntityFrameworkCore/9.0.8": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.7",
"Microsoft.EntityFrameworkCore.Analyzers": "9.0.7",
"Microsoft.Extensions.Caching.Memory": "9.0.7",
"Microsoft.Extensions.Logging": "9.0.7"
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.8",
"Microsoft.EntityFrameworkCore.Analyzers": "9.0.8",
"Microsoft.Extensions.Caching.Memory": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
"assemblyVersion": "9.0.7.0",
"fileVersion": "9.0.725.31607"
"assemblyVersion": "9.0.8.0",
"fileVersion": "9.0.825.36802"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.7": {
"Microsoft.EntityFrameworkCore.Abstractions/9.0.8": {
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"assemblyVersion": "9.0.7.0",
"fileVersion": "9.0.725.31607"
"assemblyVersion": "9.0.8.0",
"fileVersion": "9.0.825.36802"
}
}
},
"Microsoft.EntityFrameworkCore.Analyzers/9.0.7": {},
"Microsoft.EntityFrameworkCore.Design/9.0.7": {
"Microsoft.EntityFrameworkCore.Analyzers/9.0.8": {},
"Microsoft.EntityFrameworkCore.Design/9.0.8": {
"dependencies": {
"Humanizer.Core": "2.14.1",
"Microsoft.Build.Framework": "17.8.3",
@@ -374,140 +406,166 @@
"Microsoft.CodeAnalysis.CSharp": "4.8.0",
"Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0",
"Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0",
"Microsoft.EntityFrameworkCore.Relational": "9.0.7",
"Microsoft.Extensions.Caching.Memory": "9.0.7",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.7",
"Microsoft.Extensions.DependencyModel": "9.0.7",
"Microsoft.Extensions.Logging": "9.0.7",
"Microsoft.EntityFrameworkCore.Relational": "9.0.8",
"Microsoft.Extensions.Caching.Memory": "9.0.8",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.8",
"Microsoft.Extensions.DependencyModel": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8",
"Mono.TextTemplating": "3.0.0",
"System.Text.Json": "9.0.7"
"System.Text.Json": "9.0.8"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": {
"assemblyVersion": "9.0.7.0",
"fileVersion": "9.0.725.31607"
"assemblyVersion": "9.0.8.0",
"fileVersion": "9.0.825.36802"
}
}
},
"Microsoft.EntityFrameworkCore.Relational/9.0.7": {
"Microsoft.EntityFrameworkCore.Relational/9.0.8": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "9.0.7",
"Microsoft.Extensions.Caching.Memory": "9.0.7",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.7",
"Microsoft.Extensions.Logging": "9.0.7"
"Microsoft.EntityFrameworkCore": "9.0.8",
"Microsoft.Extensions.Caching.Memory": "9.0.8",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
"assemblyVersion": "9.0.7.0",
"fileVersion": "9.0.725.31607"
"assemblyVersion": "9.0.8.0",
"fileVersion": "9.0.825.36802"
}
}
},
"Microsoft.Extensions.Caching.Abstractions/9.0.7": {
"Microsoft.Extensions.Caching.Abstractions/9.0.8": {
"dependencies": {
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.Primitives": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.Caching.Memory/9.0.7": {
"Microsoft.Extensions.Caching.Memory/9.0.8": {
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "9.0.7",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7",
"Microsoft.Extensions.Logging.Abstractions": "9.0.7",
"Microsoft.Extensions.Options": "9.0.7",
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.Caching.Abstractions": "9.0.8",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
"Microsoft.Extensions.Options": "9.0.8",
"Microsoft.Extensions.Primitives": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/9.0.7": {
"Microsoft.Extensions.Configuration.Abstractions/9.0.8": {
"dependencies": {
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.Primitives": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.DependencyInjection/9.0.7": {
"Microsoft.Extensions.DependencyInjection/9.0.8": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.7": {
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.8": {
"runtime": {
"lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.DependencyModel/9.0.7": {
"Microsoft.Extensions.DependencyModel/9.0.8": {
"runtime": {
"lib/net9.0/Microsoft.Extensions.DependencyModel.dll": {
"assemblyVersion": "9.0.0.7",
"fileVersion": "9.0.725.31616"
"assemblyVersion": "9.0.0.8",
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.Logging/9.0.7": {
"Microsoft.Extensions.Identity.Core/9.0.8": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "9.0.7",
"Microsoft.Extensions.Logging.Abstractions": "9.0.7",
"Microsoft.Extensions.Options": "9.0.7"
"Microsoft.AspNetCore.Cryptography.KeyDerivation": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8",
"Microsoft.Extensions.Options": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Identity.Core.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.825.36808"
}
}
},
"Microsoft.Extensions.Identity.Stores/9.0.8": {
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "9.0.8",
"Microsoft.Extensions.Identity.Core": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Identity.Stores.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.825.36808"
}
}
},
"Microsoft.Extensions.Logging/9.0.8": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "9.0.8",
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
"Microsoft.Extensions.Options": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Logging.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/9.0.7": {
"Microsoft.Extensions.Logging.Abstractions/9.0.8": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.Options/9.0.7": {
"Microsoft.Extensions.Options/9.0.8": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7",
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
"Microsoft.Extensions.Primitives": "9.0.8"
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
"Microsoft.Extensions.Primitives/9.0.7": {
"Microsoft.Extensions.Primitives/9.0.8": {
"runtime": {
"lib/net9.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.725.31616"
"fileVersion": "9.0.825.36511"
}
}
},
@@ -546,7 +604,7 @@
},
"Npgsql/9.0.3": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "9.0.7"
"Microsoft.Extensions.Logging.Abstractions": "9.0.8"
},
"runtime": {
"lib/net8.0/Npgsql.dll": {
@@ -557,8 +615,8 @@
},
"Npgsql.EntityFrameworkCore.PostgreSQL/9.0.4": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "9.0.7",
"Microsoft.EntityFrameworkCore.Relational": "9.0.7",
"Microsoft.EntityFrameworkCore": "9.0.8",
"Microsoft.EntityFrameworkCore.Relational": "9.0.8",
"Npgsql": "9.0.3"
},
"runtime": {
@@ -773,7 +831,7 @@
}
},
"System.Security.Principal.Windows/4.7.0": {},
"System.Text.Json/9.0.7": {},
"System.Text.Json/9.0.8": {},
"System.Threading.Channels/7.0.0": {},
"System.Windows.Extensions/6.0.0": {
"dependencies": {
@@ -816,6 +874,27 @@
"path": "humanizer.core/2.14.1",
"hashPath": "humanizer.core.2.14.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Cryptography.Internal/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NwGO0wh/IjEthBLGA6fWfIiftsNF/paA5RxWp6ji4wWazetJgQ4truR9nU2thAzzFLiXqlg8vGjdVDA8bHu0zA==",
"path": "microsoft.aspnetcore.cryptography.internal/9.0.8",
"hashPath": "microsoft.aspnetcore.cryptography.internal.9.0.8.nupkg.sha512"
},
"Microsoft.AspNetCore.Cryptography.KeyDerivation/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-gK70xxXYwwPiXYKYVmLYMuIO5EOGrRtQghmM6PkgtZ/0lgLEjIs//xgSLvZkV/mroNHA1DEqTcqscEj9OzZ1IA==",
"path": "microsoft.aspnetcore.cryptography.keyderivation/9.0.8",
"hashPath": "microsoft.aspnetcore.cryptography.keyderivation.9.0.8.nupkg.sha512"
},
"Microsoft.AspNetCore.Identity.EntityFrameworkCore/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-z4q9roxXMQePwFM5tXXZS5sKkU78yYXVkj56NYYx9xKe+mxGkJMV1MaO0GFE6HnnM8bE3Xxhs0hAPw2jKbse6w==",
"path": "microsoft.aspnetcore.identity.entityframeworkcore/9.0.8",
"hashPath": "microsoft.aspnetcore.identity.entityframeworkcore.9.0.8.nupkg.sha512"
},
"Microsoft.Bcl.AsyncInterfaces/7.0.0": {
"type": "package",
"serviceable": true,
@@ -886,110 +965,124 @@
"path": "microsoft.csharp/4.7.0",
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore/9.0.7": {
"Microsoft.EntityFrameworkCore/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-PbD0q5ax15r91jD4TN7xbDCjldZSz4JfpYN4ZZjAkWeUyROkV92Ydg0O2/1keFA+2u3KPsDkJMmBKv2zQ06ZVg==",
"path": "microsoft.entityframeworkcore/9.0.7",
"hashPath": "microsoft.entityframeworkcore.9.0.7.nupkg.sha512"
"sha512": "sha512-bNGdPhN762+BIIO5MFYLjafRqkSS1MqLOc/erd55InvLnFxt9H3N5JNsuag1ZHyBor1VtD42U0CHpgqkWeAYgQ==",
"path": "microsoft.entityframeworkcore/9.0.8",
"hashPath": "microsoft.entityframeworkcore.9.0.8.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.7": {
"Microsoft.EntityFrameworkCore.Abstractions/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YUXNerEkCf4OANO+zjuMznpUW7R8XxSCqmBfYhBrbrJVc09i84KkNgeUTaOUXCGogSK/3d7ORRhMqfUobnejBg==",
"path": "microsoft.entityframeworkcore.abstractions/9.0.7",
"hashPath": "microsoft.entityframeworkcore.abstractions.9.0.7.nupkg.sha512"
"sha512": "sha512-B2yfAIQRRAQ4zvvWqh+HudD+juV3YoLlpXnrog3tU0PM9AFpuq6xo0+mEglN1P43WgdcUiF+65CWBcZe35s15Q==",
"path": "microsoft.entityframeworkcore.abstractions/9.0.8",
"hashPath": "microsoft.entityframeworkcore.abstractions.9.0.8.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Analyzers/9.0.7": {
"Microsoft.EntityFrameworkCore.Analyzers/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HqiPjAvjVOsyA1svnjL81/Wk2MRQYMK/lxKVWvw0f5IcA//VcxBepVSAqe7CFirdsPXqe8rFKEwZROWZTz7Jqw==",
"path": "microsoft.entityframeworkcore.analyzers/9.0.7",
"hashPath": "microsoft.entityframeworkcore.analyzers.9.0.7.nupkg.sha512"
"sha512": "sha512-2EYStCXt4Hi9p3J3EYMQbItJDtASJd064Kcs8C8hj8Jt5srILrR9qlaL0Ryvk8NrWQoCQvIELsmiuqLEZMLvGA==",
"path": "microsoft.entityframeworkcore.analyzers/9.0.8",
"hashPath": "microsoft.entityframeworkcore.analyzers.9.0.8.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Design/9.0.7": {
"Microsoft.EntityFrameworkCore.Design/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-zvZ2/bRwdPrBfQ2fRd2IQL6icyIOtosZSz2QpXtsn7M+c6e4GvpNfpSxBprLfoKhH6NeAFNV9ool0Vp/1DJd/A==",
"path": "microsoft.entityframeworkcore.design/9.0.7",
"hashPath": "microsoft.entityframeworkcore.design.9.0.7.nupkg.sha512"
"sha512": "sha512-02e8OcoumSUAES3VkXrMT9EnNCUKWJoifn5+8fFEbAtRhKL3xg2a/Mj6rsAUGF7tkYFox6oKzJCn0jbm6b8Lbw==",
"path": "microsoft.entityframeworkcore.design/9.0.8",
"hashPath": "microsoft.entityframeworkcore.design.9.0.8.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Relational/9.0.7": {
"Microsoft.EntityFrameworkCore.Relational/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Yo5joquG7L79H5BhtpqP8apu+KFOAYfvmj0dZnVkPElBY14wY5qva0SOcrDWzYw5BrJrhIArfCcJCJHBvMYiKg==",
"path": "microsoft.entityframeworkcore.relational/9.0.7",
"hashPath": "microsoft.entityframeworkcore.relational.9.0.7.nupkg.sha512"
"sha512": "sha512-OVhfyxiHxMvYpwQ8Jy3YZi4koy6TK5/Q7C1oq3z6db+HEGuu6x9L1BX5zDIdJxxlRePMyO4D8ORiXj/D7+MUqw==",
"path": "microsoft.entityframeworkcore.relational/9.0.8",
"hashPath": "microsoft.entityframeworkcore.relational.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Caching.Abstractions/9.0.7": {
"Microsoft.Extensions.Caching.Abstractions/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-30necCQehcg9lFkMEIE7HczcoYGML8GUH6jlincA18d896fLZM9wl5tpTPJHgzANQE/6KXRLZSWbgevgg5csSw==",
"path": "microsoft.extensions.caching.abstractions/9.0.7",
"hashPath": "microsoft.extensions.caching.abstractions.9.0.7.nupkg.sha512"
"sha512": "sha512-4h7bsVoKoiK+SlPM+euX/ayGnKZhl47pPCidLTiio9xyG+vgVVfcYxcYQgjm0SCrdSxjG0EGIAKF8EFr3G8Ifw==",
"path": "microsoft.extensions.caching.abstractions/9.0.8",
"hashPath": "microsoft.extensions.caching.abstractions.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Caching.Memory/9.0.7": {
"Microsoft.Extensions.Caching.Memory/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nDu6c8fwrHQYccLnWnvyElrdkL3rZ97TZNqL+niMFUcApVBHdpDmKcRvciGymJ4Y0iLDTOo5J2XhDQEbNb+dFg==",
"path": "microsoft.extensions.caching.memory/9.0.7",
"hashPath": "microsoft.extensions.caching.memory.9.0.7.nupkg.sha512"
"sha512": "sha512-grR+oPyj8HVn4DT8CFUUdSw2pZZKS13KjytFe4txpHQliGM1GEDotohmjgvyl3hm7RFB3FRqvbouEX3/1ewp5A==",
"path": "microsoft.extensions.caching.memory/9.0.8",
"hashPath": "microsoft.extensions.caching.memory.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/9.0.7": {
"Microsoft.Extensions.Configuration.Abstractions/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lut/kiVvNsQ120VERMUYSFhpXPpKjjql+giy03LesASPBBcC0o6+aoFdzJH9GaYpFTQ3fGVhVjKjvJDoAW5/IQ==",
"path": "microsoft.extensions.configuration.abstractions/9.0.7",
"hashPath": "microsoft.extensions.configuration.abstractions.9.0.7.nupkg.sha512"
"sha512": "sha512-yNou2KM35RvzOh4vUFtl2l33rWPvOCoba+nzEDJ+BgD8aOL/jew4WPCibQvntRfOJ2pJU8ARygSMD+pdjvDHuA==",
"path": "microsoft.extensions.configuration.abstractions/9.0.8",
"hashPath": "microsoft.extensions.configuration.abstractions.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection/9.0.7": {
"Microsoft.Extensions.DependencyInjection/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-i05AYA91vgq0as84ROVCyltD2gnxaba/f1Qw2rG7mUsS0gv8cPTr1Gm7jPQHq7JTr4MJoQUcanLVs16tIOUJaQ==",
"path": "microsoft.extensions.dependencyinjection/9.0.7",
"hashPath": "microsoft.extensions.dependencyinjection.9.0.7.nupkg.sha512"
"sha512": "sha512-JJjI2Fa+QtZcUyuNjbKn04OjIUX5IgFGFu/Xc+qvzh1rXdZHLcnqqVXhR4093bGirTwacRlHiVg1XYI9xum6QQ==",
"path": "microsoft.extensions.dependencyinjection/9.0.8",
"hashPath": "microsoft.extensions.dependencyinjection.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.7": {
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-iPK1FxbGFr2Xb+4Y+dTYI8Gupu9pOi8I3JPuPsrogUmEhe2hzZ9LpCmolMEBhVDo2ikcSr7G5zYiwaapHSQTew==",
"path": "microsoft.extensions.dependencyinjection.abstractions/9.0.7",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.9.0.7.nupkg.sha512"
"sha512": "sha512-xY3lTjj4+ZYmiKIkyWitddrp1uL5uYiweQjqo4BKBw01ZC4HhcfgLghDpPZcUlppgWAFqFy9SgkiYWOMx365pw==",
"path": "microsoft.extensions.dependencyinjection.abstractions/9.0.8",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.DependencyModel/9.0.7": {
"Microsoft.Extensions.DependencyModel/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aXEt8QW1Fj9aC81GfkMtfip4wfbkEA7VBvNkx6Rx6ZKyqXIF/9qzRtH6v/2096IDK4lt6dlQp5Ajf+kjHfUdOA==",
"path": "microsoft.extensions.dependencymodel/9.0.7",
"hashPath": "microsoft.extensions.dependencymodel.9.0.7.nupkg.sha512"
"sha512": "sha512-3CW02zNjyqJ2eORo8Zkznpw6+QvK+tYUKZgKuKuAIYdy73TRFvpaqCwYws1k6/lMSJ7ZqABfWn0/wa5bRsIJ4w==",
"path": "microsoft.extensions.dependencymodel/9.0.8",
"hashPath": "microsoft.extensions.dependencymodel.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Logging/9.0.7": {
"Microsoft.Extensions.Identity.Core/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fdIeQpXYV8yxSWG03cCbU2Otdrq4NWuhnQLXokWLv3L9YcK055E7u8WFJvP+uuP4CFeCEoqZQL4yPcjuXhCZrg==",
"path": "microsoft.extensions.logging/9.0.7",
"hashPath": "microsoft.extensions.logging.9.0.7.nupkg.sha512"
"sha512": "sha512-giUYz84GHAizDucZp5vWAusDO2s9Jrrg2jQ6HUQNGs5HQMKJVobLPMQSiyg8R4yecH0pIc0QjANh0B/Kw13BHA==",
"path": "microsoft.extensions.identity.core/9.0.8",
"hashPath": "microsoft.extensions.identity.core.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/9.0.7": {
"Microsoft.Extensions.Identity.Stores/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-sMM6NEAdUTE/elJ2wqjOi0iBWqZmSyaTByLF9e8XHv6DRJFFnOe0N+s8Uc6C91E4SboQCfLswaBIZ+9ZXA98AA==",
"path": "microsoft.extensions.logging.abstractions/9.0.7",
"hashPath": "microsoft.extensions.logging.abstractions.9.0.7.nupkg.sha512"
"sha512": "sha512-sycaHcq78yI591+KxEdd53a7pJGQEl9H/wDsFkaPNE9g7loyq8vufPcc/9RH3KlGt5joR5Ey7PdoRSrlLjCgJg==",
"path": "microsoft.extensions.identity.stores/9.0.8",
"hashPath": "microsoft.extensions.identity.stores.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Options/9.0.7": {
"Microsoft.Extensions.Logging/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-trJnF6cRWgR5uMmHpGoHmM1wOVFdIYlELlkO9zX+RfieK0321Y55zrcs4AaEymKup7dxgEN/uJU25CAcMNQRXw==",
"path": "microsoft.extensions.options/9.0.7",
"hashPath": "microsoft.extensions.options.9.0.7.nupkg.sha512"
"sha512": "sha512-Z/7ze+0iheT7FJeZPqJKARYvyC2bmwu3whbm/48BJjdlGVvgDguoCqJIkI/67NkroTYobd5geai1WheNQvWrgA==",
"path": "microsoft.extensions.logging/9.0.8",
"hashPath": "microsoft.extensions.logging.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/9.0.7": {
"Microsoft.Extensions.Logging.Abstractions/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ti/zD9BuuO50IqlvhWQs9GHxkCmoph5BHjGiWKdg2t6Or8XoyAfRJiKag+uvd/fpASnNklfsB01WpZ4fhAe0VQ==",
"path": "microsoft.extensions.primitives/9.0.7",
"hashPath": "microsoft.extensions.primitives.9.0.7.nupkg.sha512"
"sha512": "sha512-pYnAffJL7ARD/HCnnPvnFKSIHnTSmWz84WIlT9tPeQ4lHNiu0Az7N/8itihWvcF8sT+VVD5lq8V+ckMzu4SbOw==",
"path": "microsoft.extensions.logging.abstractions/9.0.8",
"hashPath": "microsoft.extensions.logging.abstractions.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Options/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OmTaQ0v4gxGQkehpwWIqPoEiwsPuG/u4HUsbOFoWGx4DKET2AXzopnFe/fE608FIhzc/kcg2p8JdyMRCCUzitQ==",
"path": "microsoft.extensions.options/9.0.8",
"hashPath": "microsoft.extensions.options.9.0.8.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tizSIOEsIgSNSSh+hKeUVPK7xmTIjR8s+mJWOu1KXV3htvNQiPMFRMO17OdI1y/4ZApdBVk49u/08QGC9yvLug==",
"path": "microsoft.extensions.primitives/9.0.8",
"hashPath": "microsoft.extensions.primitives.9.0.8.nupkg.sha512"
},
"Microsoft.Win32.Registry/4.7.0": {
"type": "package",
@@ -1187,12 +1280,12 @@
"path": "system.security.principal.windows/4.7.0",
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
},
"System.Text.Json/9.0.7": {
"System.Text.Json/9.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-u/lN2FEEXs3ghj2ta8tWA4r2MS9Yni07K7jDmnz8h1UPDf0lIIIEMkWx383Zz4fJjJio7gDl+00RYuQ/7R8ZQw==",
"path": "system.text.json/9.0.7",
"hashPath": "system.text.json.9.0.7.nupkg.sha512"
"sha512": "sha512-mIQir9jBqk0V7X0Nw5hzPJZC8DuGdf+2DS3jAVsr6rq5+/VyH5rza0XGcONJUWBrZ+G6BCwNyjWYd9lncBu48A==",
"path": "system.text.json/9.0.8",
"hashPath": "system.text.json.9.0.8.nupkg.sha512"
},
"System.Threading.Channels/7.0.0": {
"type": "package",

View File

@@ -15,7 +15,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OpenArchival.DataAccess")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+57f67e85356af6759fc0211e8a510bd5b9f63dfa")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dd3968f6effa8f45f27a3ec91c34762c88380f06")]
[assembly: System.Reflection.AssemblyProductAttribute("OpenArchival.DataAccess")]
[assembly: System.Reflection.AssemblyTitleAttribute("OpenArchival.DataAccess")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +1 @@
808f6c610c1c46216d223aa1e70b8807727983a986fd71ba08b5576fad3f7e5e
3f1dc26310f431c1735242d3a315e070d6215de828a0f93ee5bf50c1e5b9de38

View File

@@ -17,13 +17,13 @@ build_property._SupportedPlatformList = Linux,macOS,Windows
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = OpenArchival.DataAccess
build_property.RootNamespace = OpenArchival.DataAccess
build_property.ProjectDir = E:\Open-Archival\OpenArchival.DataAccess\
build_property.ProjectDir = D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 9.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = E:\Open-Archival\OpenArchival.DataAccess
build_property.MSBuildProjectDirectory = D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess
build_property._RazorSourceGeneratorDebug =
build_property.EffectiveAnalysisLevelStyle = 9.0
build_property.EnableCodeStyleSeverity =

View File

@@ -1 +1 @@
3f7bfc7be1cfc2225aad8cc99eb2f41902b3708d4b14fcb913d1f4046f795c81
d522794407833b06ba6eccd7e464f0208f52e133c1fb09f86eb438d0e9e5f2be

View File

@@ -290,3 +290,304 @@ E:\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\unix\lib\net6
E:\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Drawing.Common.dll
E:\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Security.Cryptography.ProtectedData.dll
E:\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Windows.Extensions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\appsettings.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.staticwebassets.endpoints.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.exe
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.deps.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.runtimeconfig.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.pdb
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\EntityFramework.SqlServer.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\EntityFramework.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Humanizer.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.AspNetCore.Cryptography.Internal.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Bcl.AsyncInterfaces.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Build.Locator.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Abstractions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Design.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Relational.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Caching.Abstractions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Caching.Memory.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Configuration.Abstractions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.DependencyInjection.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.DependencyModel.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Identity.Core.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Identity.Stores.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Logging.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Logging.Abstractions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Options.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Primitives.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Win32.SystemEvents.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Mono.TextTemplating.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Npgsql.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.CodeDom.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.AttributedModel.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.Convention.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.Hosting.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.Runtime.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.TypedParts.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Configuration.ConfigurationManager.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Data.SqlClient.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Drawing.Common.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Security.Cryptography.ProtectedData.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Security.Permissions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Windows.Extensions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\Microsoft.Win32.SystemEvents.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win-arm64\native\sni.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win-x64\native\sni.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win-x86\native\sni.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\unix\lib\netcoreapp2.1\System.Data.SqlClient.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\netcoreapp2.1\System.Data.SqlClient.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\unix\lib\net6.0\System.Drawing.Common.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Drawing.Common.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Security.Cryptography.ProtectedData.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Windows.Extensions.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.csproj.AssemblyReference.cache
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rpswa.dswa.cache.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.AssemblyInfoInputs.cache
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.AssemblyInfo.cs
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.csproj.CoreCompileInputs.cache
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.MvcApplicationPartsAssemblyInfo.cache
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.sourcelink.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rjimswa.dswa.cache.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rjsmrazor.dswa.cache.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\scopedcss\bundle\OpenArchival.DataAccess.styles.css
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json.cache
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.development.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.endpoints.json
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArch.D40B5A94.Up2Date
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\refint\OpenArchival.DataAccess.dll
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.pdb
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.genruntimeconfig.cache
C:\Users\Vincent Allen\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\ref\OpenArchival.DataAccess.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\appsettings.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.staticwebassets.endpoints.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.exe
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.deps.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.runtimeconfig.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\OpenArchival.DataAccess.pdb
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\EntityFramework.SqlServer.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\EntityFramework.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Humanizer.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.AspNetCore.Cryptography.Internal.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Bcl.AsyncInterfaces.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Build.Locator.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Abstractions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Design.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Relational.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Caching.Abstractions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Caching.Memory.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Configuration.Abstractions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.DependencyInjection.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.DependencyModel.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Identity.Core.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Identity.Stores.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Logging.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Logging.Abstractions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Options.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Extensions.Primitives.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Microsoft.Win32.SystemEvents.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Mono.TextTemplating.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Npgsql.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.CodeDom.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.AttributedModel.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.Convention.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.Hosting.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.Runtime.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Composition.TypedParts.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Configuration.ConfigurationManager.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Data.SqlClient.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Drawing.Common.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Security.Cryptography.ProtectedData.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Security.Permissions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\System.Windows.Extensions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\Microsoft.Win32.SystemEvents.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win-arm64\native\sni.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win-x64\native\sni.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win-x86\native\sni.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\unix\lib\netcoreapp2.1\System.Data.SqlClient.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\netcoreapp2.1\System.Data.SqlClient.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\unix\lib\net6.0\System.Drawing.Common.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Drawing.Common.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Security.Cryptography.ProtectedData.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Windows.Extensions.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.csproj.AssemblyReference.cache
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rpswa.dswa.cache.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.GeneratedMSBuildEditorConfig.editorconfig
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.AssemblyInfoInputs.cache
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.AssemblyInfo.cs
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.csproj.CoreCompileInputs.cache
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.MvcApplicationPartsAssemblyInfo.cache
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.sourcelink.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rjimswa.dswa.cache.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rjsmrazor.dswa.cache.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\scopedcss\bundle\OpenArchival.DataAccess.styles.css
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.json.cache
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.development.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.build.endpoints.json
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArch.D40B5A94.Up2Date
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\refint\OpenArchival.DataAccess.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.pdb
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\OpenArchival.DataAccess.genruntimeconfig.cache
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\ref\OpenArchival.DataAccess.dll
D:\Nextcloud\Documents\Open-Archival\OpenArchival.DataAccess\obj\Debug\net9.0\staticwebassets.upToDateCheck.txt

View File

@@ -1 +1 @@
af4a363097039e05d80de9a719c83ac11441104edd473d4d6fd5082226e906dd
da0a04e4e54dc974e94d8c1063ec630c247cb827f3d41b1ae6eb278ec5187927

View File

@@ -1 +1 @@
{"documents":{"E:\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/57f67e85356af6759fc0211e8a510bd5b9f63dfa/*"}}
{"documents":{"D:\\Nextcloud\\Documents\\Open-Archival\\*":"https://raw.githubusercontent.com/vtallen/Open-Archival/dd3968f6effa8f45f27a3ec91c34762c88380f06/*"}}

View File

@@ -1 +1 @@
{"GlobalPropertiesHash":"OJEKDWq9lWEmKslORR+s1Yv8f2prlba6bEhTFN02t5U=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["nQ\u002BHUOtDmuDCQGtM7zXd209SlWbvBIJZES61USwqY5A=","4/9Si015IC3YmJ6Xix8zWBj06SRWILjSExte8OLbO8Q=","irVjzTLx0Z/BFXIABDZ1GotRlc4mBLgrZsZ2UGfwumY=","cdAgFiO\u002BnL3ryJYKkeuiod9Sn/pesPeRQrSrSVy88T8=","O1mm\u002Bt5ytSAy2lB1xcI4g3i\u002BQyFL\u002BdzKOosUJop08GY=","Xig047KP8P7Lig/Q0gTQtIKRBUHp\u002BiIvJ1MUU5P5mbQ="],"CachedAssets":{},"CachedCopyCandidates":{}}
{"GlobalPropertiesHash":"J3r5h7pKF0kY0DRJx0Xqba86ngtHs3jduVq7GPX+nwI=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["51WRq7nT/WTvnhamRxLn7Ony/A1bnAxDelsXO4Ehpwc=","aDrxgmPzfmAYNrzynmphKXORQNARBvx3ZJm3IcIlVIA=","dFQa1Ee6LWN6QaEoa8lulEtbH6imVMCsVrPTv7uB7rA=","KAWcEu8sopHLr7dsoLsr\u002Bz7vrHN0YxMtmdfBYeH1kwI=","\u002Bjyo4JejKGZVNH7yAY1POV7dsMBGmszgVLUsVwm0S6Y=","E6ltkajZSrcZfEd5mYBcKe4AnJ/ZOJ8hZBTp71ugK08="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@@ -1 +1 @@
{"GlobalPropertiesHash":"YfQizJn4zSp4AikfK1nxeFwsBV5ZIuB3IRWuUoYJGwE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["nQ\u002BHUOtDmuDCQGtM7zXd209SlWbvBIJZES61USwqY5A=","4/9Si015IC3YmJ6Xix8zWBj06SRWILjSExte8OLbO8Q=","irVjzTLx0Z/BFXIABDZ1GotRlc4mBLgrZsZ2UGfwumY=","cdAgFiO\u002BnL3ryJYKkeuiod9Sn/pesPeRQrSrSVy88T8=","O1mm\u002Bt5ytSAy2lB1xcI4g3i\u002BQyFL\u002BdzKOosUJop08GY=","Xig047KP8P7Lig/Q0gTQtIKRBUHp\u002BiIvJ1MUU5P5mbQ="],"CachedAssets":{},"CachedCopyCandidates":{}}
{"GlobalPropertiesHash":"EHbx5ejyqDv8gH5NpOoZxRAV9glFiYxTGFnRTcGg8no=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["51WRq7nT/WTvnhamRxLn7Ony/A1bnAxDelsXO4Ehpwc=","aDrxgmPzfmAYNrzynmphKXORQNARBvx3ZJm3IcIlVIA=","dFQa1Ee6LWN6QaEoa8lulEtbH6imVMCsVrPTv7uB7rA=","KAWcEu8sopHLr7dsoLsr\u002Bz7vrHN0YxMtmdfBYeH1kwI=","\u002Bjyo4JejKGZVNH7yAY1POV7dsMBGmszgVLUsVwm0S6Y=","E6ltkajZSrcZfEd5mYBcKe4AnJ/ZOJ8hZBTp71ugK08="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@@ -1 +1 @@
{"GlobalPropertiesHash":"0iteAXuNRYKccgQAeOh+tXRtjZ1XQefudIfX8+LTWdY=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["nQ\u002BHUOtDmuDCQGtM7zXd209SlWbvBIJZES61USwqY5A="],"CachedAssets":{},"CachedCopyCandidates":{}}
{"GlobalPropertiesHash":"9cGwE8ue3wqBKu3kjFF7DFgS5ZARHdAQ0zvK3akV70c=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["51WRq7nT/WTvnhamRxLn7Ony/A1bnAxDelsXO4Ehpwc="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@@ -1,23 +1,23 @@
{
"format": 1,
"restore": {
"E:\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {}
"D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {}
},
"projects": {
"E:\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {
"D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "E:\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"projectUniqueName": "D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"projectName": "OpenArchival.DataAccess",
"projectPath": "E:\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"projectPath": "D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"packagesPath": "C:\\Users\\Vincent Allen\\.nuget\\packages\\",
"outputPath": "E:\\Open-Archival\\OpenArchival.DataAccess\\obj\\",
"outputPath": "D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"E:\\Open-Archival\\NuGet.Config",
"D:\\Nextcloud\\Documents\\Open-Archival\\NuGet.Config",
"C:\\Users\\Vincent Allen\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
@@ -55,19 +55,23 @@
"target": "Package",
"version": "[6.5.1, )"
},
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": {
"target": "Package",
"version": "[9.0.8, )"
},
"Microsoft.EntityFrameworkCore": {
"target": "Package",
"version": "[9.0.7, )"
"version": "[9.0.8, )"
},
"Microsoft.EntityFrameworkCore.Design": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
"suppressParent": "All",
"target": "Package",
"version": "[9.0.7, )"
"version": "[9.0.8, )"
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"target": "Package",
"version": "[9.0.7, )"
"version": "[9.0.8, )"
},
"Npgsql": {
"target": "Package",
@@ -97,7 +101,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.302/PortableRuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
}
}
}

View File

@@ -7,16 +7,16 @@
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Vincent Allen\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Vincent Allen\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\9.0.7\buildTransitive\net8.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\9.0.7\buildTransitive\net8.0\Microsoft.EntityFrameworkCore.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\9.0.8\buildTransitive\net8.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\9.0.8\buildTransitive\net8.0\Microsoft.EntityFrameworkCore.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.4\buildTransitive\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.4\buildTransitive\Microsoft.CodeAnalysis.Analyzers.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore.design\9.0.7\build\net8.0\Microsoft.EntityFrameworkCore.Design.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore.design\9.0.7\build\net8.0\Microsoft.EntityFrameworkCore.Design.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore.design\9.0.8\build\net8.0\Microsoft.EntityFrameworkCore.Design.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore.design\9.0.8\build\net8.0\Microsoft.EntityFrameworkCore.Design.props')" />
<Import Project="$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.props" Condition="Exists('$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.props')" />
</ImportGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)system.text.json\9.0.7\buildTransitive\net8.0\System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json\9.0.7\buildTransitive\net8.0\System.Text.Json.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.7\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.7\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\9.0.7\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\9.0.7\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)system.text.json\9.0.8\buildTransitive\net8.0\System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json\9.0.8\buildTransitive\net8.0\System.Text.Json.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\9.0.8\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)mono.texttemplating\3.0.0\buildTransitive\Mono.TextTemplating.targets" Condition="Exists('$(NuGetPackageRoot)mono.texttemplating\3.0.0\buildTransitive\Mono.TextTemplating.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.4\buildTransitive\Microsoft.CodeAnalysis.Analyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.codeanalysis.analyzers\3.3.4\buildTransitive\Microsoft.CodeAnalysis.Analyzers.targets')" />
<Import Project="$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.targets" Condition="Exists('$(NuGetPackageRoot)entityframework\6.5.1\buildTransitive\net6.0\EntityFramework.targets')" />

View File

@@ -45,6 +45,52 @@
}
}
},
"Microsoft.AspNetCore.Cryptography.Internal/9.0.8": {
"type": "package",
"compile": {
"lib/net9.0/Microsoft.AspNetCore.Cryptography.Internal.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Cryptography.Internal.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Cryptography.KeyDerivation/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Cryptography.Internal": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll": {
"related": ".xml"
}
}
},
"Microsoft.AspNetCore.Identity.EntityFrameworkCore/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "9.0.8",
"Microsoft.Extensions.Identity.Stores": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll": {
"related": ".xml"
}
}
},
"Microsoft.Bcl.AsyncInterfaces/7.0.0": {
"type": "package",
"compile": {
@@ -401,13 +447,13 @@
"lib/netcoreapp2.0/_._": {}
}
},
"Microsoft.EntityFrameworkCore/9.0.7": {
"Microsoft.EntityFrameworkCore/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.7",
"Microsoft.EntityFrameworkCore.Analyzers": "9.0.7",
"Microsoft.Extensions.Caching.Memory": "9.0.7",
"Microsoft.Extensions.Logging": "9.0.7"
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.8",
"Microsoft.EntityFrameworkCore.Analyzers": "9.0.8",
"Microsoft.Extensions.Caching.Memory": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8"
},
"compile": {
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
@@ -423,7 +469,7 @@
"buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props": {}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.7": {
"Microsoft.EntityFrameworkCore.Abstractions/9.0.8": {
"type": "package",
"compile": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
@@ -436,10 +482,10 @@
}
}
},
"Microsoft.EntityFrameworkCore.Analyzers/9.0.7": {
"Microsoft.EntityFrameworkCore.Analyzers/9.0.8": {
"type": "package"
},
"Microsoft.EntityFrameworkCore.Design/9.0.7": {
"Microsoft.EntityFrameworkCore.Design/9.0.8": {
"type": "package",
"dependencies": {
"Humanizer.Core": "2.14.1",
@@ -448,13 +494,13 @@
"Microsoft.CodeAnalysis.CSharp": "4.8.0",
"Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0",
"Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0",
"Microsoft.EntityFrameworkCore.Relational": "9.0.7",
"Microsoft.Extensions.Caching.Memory": "9.0.7",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.7",
"Microsoft.Extensions.DependencyModel": "9.0.7",
"Microsoft.Extensions.Logging": "9.0.7",
"Microsoft.EntityFrameworkCore.Relational": "9.0.8",
"Microsoft.Extensions.Caching.Memory": "9.0.8",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.8",
"Microsoft.Extensions.DependencyModel": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8",
"Mono.TextTemplating": "3.0.0",
"System.Text.Json": "9.0.7"
"System.Text.Json": "9.0.8"
},
"compile": {
"lib/net8.0/_._": {
@@ -470,13 +516,13 @@
"build/net8.0/Microsoft.EntityFrameworkCore.Design.props": {}
}
},
"Microsoft.EntityFrameworkCore.Relational/9.0.7": {
"Microsoft.EntityFrameworkCore.Relational/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.EntityFrameworkCore": "9.0.7",
"Microsoft.Extensions.Caching.Memory": "9.0.7",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.7",
"Microsoft.Extensions.Logging": "9.0.7"
"Microsoft.EntityFrameworkCore": "9.0.8",
"Microsoft.Extensions.Caching.Memory": "9.0.8",
"Microsoft.Extensions.Configuration.Abstractions": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8"
},
"compile": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
@@ -489,10 +535,10 @@
}
}
},
"Microsoft.Extensions.Caching.Abstractions/9.0.7": {
"Microsoft.Extensions.Caching.Abstractions/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.Primitives": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": {
@@ -508,14 +554,14 @@
"buildTransitive/net8.0/_._": {}
}
},
"Microsoft.Extensions.Caching.Memory/9.0.7": {
"Microsoft.Extensions.Caching.Memory/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "9.0.7",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7",
"Microsoft.Extensions.Logging.Abstractions": "9.0.7",
"Microsoft.Extensions.Options": "9.0.7",
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.Caching.Abstractions": "9.0.8",
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
"Microsoft.Extensions.Options": "9.0.8",
"Microsoft.Extensions.Primitives": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": {
@@ -531,10 +577,10 @@
"buildTransitive/net8.0/_._": {}
}
},
"Microsoft.Extensions.Configuration.Abstractions/9.0.7": {
"Microsoft.Extensions.Configuration.Abstractions/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.Primitives": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
@@ -550,10 +596,10 @@
"buildTransitive/net8.0/_._": {}
}
},
"Microsoft.Extensions.DependencyInjection/9.0.7": {
"Microsoft.Extensions.DependencyInjection/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": {
@@ -569,7 +615,7 @@
"buildTransitive/net8.0/_._": {}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.7": {
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.8": {
"type": "package",
"compile": {
"lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
@@ -585,7 +631,7 @@
"buildTransitive/net8.0/_._": {}
}
},
"Microsoft.Extensions.DependencyModel/9.0.7": {
"Microsoft.Extensions.DependencyModel/9.0.8": {
"type": "package",
"compile": {
"lib/net9.0/_._": {
@@ -601,12 +647,48 @@
"buildTransitive/net8.0/_._": {}
}
},
"Microsoft.Extensions.Logging/9.0.7": {
"Microsoft.Extensions.Identity.Core/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "9.0.7",
"Microsoft.Extensions.Logging.Abstractions": "9.0.7",
"Microsoft.Extensions.Options": "9.0.7"
"Microsoft.AspNetCore.Cryptography.KeyDerivation": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8",
"Microsoft.Extensions.Options": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Identity.Core.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Identity.Core.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Identity.Stores/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "9.0.8",
"Microsoft.Extensions.Identity.Core": "9.0.8",
"Microsoft.Extensions.Logging": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Identity.Stores.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Identity.Stores.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Logging/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "9.0.8",
"Microsoft.Extensions.Logging.Abstractions": "9.0.8",
"Microsoft.Extensions.Options": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Logging.dll": {
@@ -622,10 +704,10 @@
"buildTransitive/net8.0/_._": {}
}
},
"Microsoft.Extensions.Logging.Abstractions/9.0.7": {
"Microsoft.Extensions.Logging.Abstractions/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": {
@@ -641,11 +723,11 @@
"buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {}
}
},
"Microsoft.Extensions.Options/9.0.7": {
"Microsoft.Extensions.Options/9.0.8": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7",
"Microsoft.Extensions.Primitives": "9.0.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.8",
"Microsoft.Extensions.Primitives": "9.0.8"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Options.dll": {
@@ -661,7 +743,7 @@
"buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {}
}
},
"Microsoft.Extensions.Primitives/9.0.7": {
"Microsoft.Extensions.Primitives/9.0.8": {
"type": "package",
"compile": {
"lib/net9.0/Microsoft.Extensions.Primitives.dll": {
@@ -1180,7 +1262,7 @@
}
}
},
"System.Text.Json/9.0.7": {
"System.Text.Json/9.0.8": {
"type": "package",
"compile": {
"lib/net9.0/_._": {
@@ -1317,6 +1399,59 @@
"logo.png"
]
},
"Microsoft.AspNetCore.Cryptography.Internal/9.0.8": {
"sha512": "NwGO0wh/IjEthBLGA6fWfIiftsNF/paA5RxWp6ji4wWazetJgQ4truR9nU2thAzzFLiXqlg8vGjdVDA8bHu0zA==",
"type": "package",
"path": "microsoft.aspnetcore.cryptography.internal/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"THIRD-PARTY-NOTICES.TXT",
"lib/net462/Microsoft.AspNetCore.Cryptography.Internal.dll",
"lib/net462/Microsoft.AspNetCore.Cryptography.Internal.xml",
"lib/net9.0/Microsoft.AspNetCore.Cryptography.Internal.dll",
"lib/net9.0/Microsoft.AspNetCore.Cryptography.Internal.xml",
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.Internal.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.Internal.xml",
"microsoft.aspnetcore.cryptography.internal.9.0.8.nupkg.sha512",
"microsoft.aspnetcore.cryptography.internal.nuspec"
]
},
"Microsoft.AspNetCore.Cryptography.KeyDerivation/9.0.8": {
"sha512": "gK70xxXYwwPiXYKYVmLYMuIO5EOGrRtQghmM6PkgtZ/0lgLEjIs//xgSLvZkV/mroNHA1DEqTcqscEj9OzZ1IA==",
"type": "package",
"path": "microsoft.aspnetcore.cryptography.keyderivation/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"THIRD-PARTY-NOTICES.TXT",
"lib/net462/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll",
"lib/net462/Microsoft.AspNetCore.Cryptography.KeyDerivation.xml",
"lib/net9.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll",
"lib/net9.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.xml",
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll",
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.xml",
"microsoft.aspnetcore.cryptography.keyderivation.9.0.8.nupkg.sha512",
"microsoft.aspnetcore.cryptography.keyderivation.nuspec"
]
},
"Microsoft.AspNetCore.Identity.EntityFrameworkCore/9.0.8": {
"sha512": "z4q9roxXMQePwFM5tXXZS5sKkU78yYXVkj56NYYx9xKe+mxGkJMV1MaO0GFE6HnnM8bE3Xxhs0hAPw2jKbse6w==",
"type": "package",
"path": "microsoft.aspnetcore.identity.entityframeworkcore/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"THIRD-PARTY-NOTICES.TXT",
"lib/net9.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll",
"lib/net9.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.xml",
"microsoft.aspnetcore.identity.entityframeworkcore.9.0.8.nupkg.sha512",
"microsoft.aspnetcore.identity.entityframeworkcore.nuspec"
]
},
"Microsoft.Bcl.AsyncInterfaces/7.0.0": {
"sha512": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==",
"type": "package",
@@ -2368,10 +2503,10 @@
"version.txt"
]
},
"Microsoft.EntityFrameworkCore/9.0.7": {
"sha512": "PbD0q5ax15r91jD4TN7xbDCjldZSz4JfpYN4ZZjAkWeUyROkV92Ydg0O2/1keFA+2u3KPsDkJMmBKv2zQ06ZVg==",
"Microsoft.EntityFrameworkCore/9.0.8": {
"sha512": "bNGdPhN762+BIIO5MFYLjafRqkSS1MqLOc/erd55InvLnFxt9H3N5JNsuag1ZHyBor1VtD42U0CHpgqkWeAYgQ==",
"type": "package",
"path": "microsoft.entityframeworkcore/9.0.7",
"path": "microsoft.entityframeworkcore/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2380,14 +2515,14 @@
"buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props",
"lib/net8.0/Microsoft.EntityFrameworkCore.dll",
"lib/net8.0/Microsoft.EntityFrameworkCore.xml",
"microsoft.entityframeworkcore.9.0.7.nupkg.sha512",
"microsoft.entityframeworkcore.9.0.8.nupkg.sha512",
"microsoft.entityframeworkcore.nuspec"
]
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.7": {
"sha512": "YUXNerEkCf4OANO+zjuMznpUW7R8XxSCqmBfYhBrbrJVc09i84KkNgeUTaOUXCGogSK/3d7ORRhMqfUobnejBg==",
"Microsoft.EntityFrameworkCore.Abstractions/9.0.8": {
"sha512": "B2yfAIQRRAQ4zvvWqh+HudD+juV3YoLlpXnrog3tU0PM9AFpuq6xo0+mEglN1P43WgdcUiF+65CWBcZe35s15Q==",
"type": "package",
"path": "microsoft.entityframeworkcore.abstractions/9.0.7",
"path": "microsoft.entityframeworkcore.abstractions/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2395,28 +2530,28 @@
"PACKAGE.md",
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll",
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.xml",
"microsoft.entityframeworkcore.abstractions.9.0.7.nupkg.sha512",
"microsoft.entityframeworkcore.abstractions.9.0.8.nupkg.sha512",
"microsoft.entityframeworkcore.abstractions.nuspec"
]
},
"Microsoft.EntityFrameworkCore.Analyzers/9.0.7": {
"sha512": "HqiPjAvjVOsyA1svnjL81/Wk2MRQYMK/lxKVWvw0f5IcA//VcxBepVSAqe7CFirdsPXqe8rFKEwZROWZTz7Jqw==",
"Microsoft.EntityFrameworkCore.Analyzers/9.0.8": {
"sha512": "2EYStCXt4Hi9p3J3EYMQbItJDtASJd064Kcs8C8hj8Jt5srILrR9qlaL0Ryvk8NrWQoCQvIELsmiuqLEZMLvGA==",
"type": "package",
"path": "microsoft.entityframeworkcore.analyzers/9.0.7",
"path": "microsoft.entityframeworkcore.analyzers/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll",
"docs/PACKAGE.md",
"microsoft.entityframeworkcore.analyzers.9.0.7.nupkg.sha512",
"microsoft.entityframeworkcore.analyzers.9.0.8.nupkg.sha512",
"microsoft.entityframeworkcore.analyzers.nuspec"
]
},
"Microsoft.EntityFrameworkCore.Design/9.0.7": {
"sha512": "zvZ2/bRwdPrBfQ2fRd2IQL6icyIOtosZSz2QpXtsn7M+c6e4GvpNfpSxBprLfoKhH6NeAFNV9ool0Vp/1DJd/A==",
"Microsoft.EntityFrameworkCore.Design/9.0.8": {
"sha512": "02e8OcoumSUAES3VkXrMT9EnNCUKWJoifn5+8fFEbAtRhKL3xg2a/Mj6rsAUGF7tkYFox6oKzJCn0jbm6b8Lbw==",
"type": "package",
"path": "microsoft.entityframeworkcore.design/9.0.7",
"path": "microsoft.entityframeworkcore.design/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2425,14 +2560,14 @@
"build/net8.0/Microsoft.EntityFrameworkCore.Design.props",
"lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll",
"lib/net8.0/Microsoft.EntityFrameworkCore.Design.xml",
"microsoft.entityframeworkcore.design.9.0.7.nupkg.sha512",
"microsoft.entityframeworkcore.design.9.0.8.nupkg.sha512",
"microsoft.entityframeworkcore.design.nuspec"
]
},
"Microsoft.EntityFrameworkCore.Relational/9.0.7": {
"sha512": "Yo5joquG7L79H5BhtpqP8apu+KFOAYfvmj0dZnVkPElBY14wY5qva0SOcrDWzYw5BrJrhIArfCcJCJHBvMYiKg==",
"Microsoft.EntityFrameworkCore.Relational/9.0.8": {
"sha512": "OVhfyxiHxMvYpwQ8Jy3YZi4koy6TK5/Q7C1oq3z6db+HEGuu6x9L1BX5zDIdJxxlRePMyO4D8ORiXj/D7+MUqw==",
"type": "package",
"path": "microsoft.entityframeworkcore.relational/9.0.7",
"path": "microsoft.entityframeworkcore.relational/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2440,14 +2575,14 @@
"PACKAGE.md",
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll",
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.xml",
"microsoft.entityframeworkcore.relational.9.0.7.nupkg.sha512",
"microsoft.entityframeworkcore.relational.9.0.8.nupkg.sha512",
"microsoft.entityframeworkcore.relational.nuspec"
]
},
"Microsoft.Extensions.Caching.Abstractions/9.0.7": {
"sha512": "30necCQehcg9lFkMEIE7HczcoYGML8GUH6jlincA18d896fLZM9wl5tpTPJHgzANQE/6KXRLZSWbgevgg5csSw==",
"Microsoft.Extensions.Caching.Abstractions/9.0.8": {
"sha512": "4h7bsVoKoiK+SlPM+euX/ayGnKZhl47pPCidLTiio9xyG+vgVVfcYxcYQgjm0SCrdSxjG0EGIAKF8EFr3G8Ifw==",
"type": "package",
"path": "microsoft.extensions.caching.abstractions/9.0.7",
"path": "microsoft.extensions.caching.abstractions/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2467,15 +2602,15 @@
"lib/net9.0/Microsoft.Extensions.Caching.Abstractions.xml",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml",
"microsoft.extensions.caching.abstractions.9.0.7.nupkg.sha512",
"microsoft.extensions.caching.abstractions.9.0.8.nupkg.sha512",
"microsoft.extensions.caching.abstractions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Caching.Memory/9.0.7": {
"sha512": "nDu6c8fwrHQYccLnWnvyElrdkL3rZ97TZNqL+niMFUcApVBHdpDmKcRvciGymJ4Y0iLDTOo5J2XhDQEbNb+dFg==",
"Microsoft.Extensions.Caching.Memory/9.0.8": {
"sha512": "grR+oPyj8HVn4DT8CFUUdSw2pZZKS13KjytFe4txpHQliGM1GEDotohmjgvyl3hm7RFB3FRqvbouEX3/1ewp5A==",
"type": "package",
"path": "microsoft.extensions.caching.memory/9.0.7",
"path": "microsoft.extensions.caching.memory/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2495,15 +2630,15 @@
"lib/net9.0/Microsoft.Extensions.Caching.Memory.xml",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml",
"microsoft.extensions.caching.memory.9.0.7.nupkg.sha512",
"microsoft.extensions.caching.memory.9.0.8.nupkg.sha512",
"microsoft.extensions.caching.memory.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Configuration.Abstractions/9.0.7": {
"sha512": "lut/kiVvNsQ120VERMUYSFhpXPpKjjql+giy03LesASPBBcC0o6+aoFdzJH9GaYpFTQ3fGVhVjKjvJDoAW5/IQ==",
"Microsoft.Extensions.Configuration.Abstractions/9.0.8": {
"sha512": "yNou2KM35RvzOh4vUFtl2l33rWPvOCoba+nzEDJ+BgD8aOL/jew4WPCibQvntRfOJ2pJU8ARygSMD+pdjvDHuA==",
"type": "package",
"path": "microsoft.extensions.configuration.abstractions/9.0.7",
"path": "microsoft.extensions.configuration.abstractions/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2523,15 +2658,15 @@
"lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.xml",
"lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml",
"microsoft.extensions.configuration.abstractions.9.0.7.nupkg.sha512",
"microsoft.extensions.configuration.abstractions.9.0.8.nupkg.sha512",
"microsoft.extensions.configuration.abstractions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.DependencyInjection/9.0.7": {
"sha512": "i05AYA91vgq0as84ROVCyltD2gnxaba/f1Qw2rG7mUsS0gv8cPTr1Gm7jPQHq7JTr4MJoQUcanLVs16tIOUJaQ==",
"Microsoft.Extensions.DependencyInjection/9.0.8": {
"sha512": "JJjI2Fa+QtZcUyuNjbKn04OjIUX5IgFGFu/Xc+qvzh1rXdZHLcnqqVXhR4093bGirTwacRlHiVg1XYI9xum6QQ==",
"type": "package",
"path": "microsoft.extensions.dependencyinjection/9.0.7",
"path": "microsoft.extensions.dependencyinjection/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2553,15 +2688,15 @@
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml",
"microsoft.extensions.dependencyinjection.9.0.7.nupkg.sha512",
"microsoft.extensions.dependencyinjection.9.0.8.nupkg.sha512",
"microsoft.extensions.dependencyinjection.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.7": {
"sha512": "iPK1FxbGFr2Xb+4Y+dTYI8Gupu9pOi8I3JPuPsrogUmEhe2hzZ9LpCmolMEBhVDo2ikcSr7G5zYiwaapHSQTew==",
"Microsoft.Extensions.DependencyInjection.Abstractions/9.0.8": {
"sha512": "xY3lTjj4+ZYmiKIkyWitddrp1uL5uYiweQjqo4BKBw01ZC4HhcfgLghDpPZcUlppgWAFqFy9SgkiYWOMx365pw==",
"type": "package",
"path": "microsoft.extensions.dependencyinjection.abstractions/9.0.7",
"path": "microsoft.extensions.dependencyinjection.abstractions/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2583,15 +2718,15 @@
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"microsoft.extensions.dependencyinjection.abstractions.9.0.7.nupkg.sha512",
"microsoft.extensions.dependencyinjection.abstractions.9.0.8.nupkg.sha512",
"microsoft.extensions.dependencyinjection.abstractions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.DependencyModel/9.0.7": {
"sha512": "aXEt8QW1Fj9aC81GfkMtfip4wfbkEA7VBvNkx6Rx6ZKyqXIF/9qzRtH6v/2096IDK4lt6dlQp5Ajf+kjHfUdOA==",
"Microsoft.Extensions.DependencyModel/9.0.8": {
"sha512": "3CW02zNjyqJ2eORo8Zkznpw6+QvK+tYUKZgKuKuAIYdy73TRFvpaqCwYws1k6/lMSJ7ZqABfWn0/wa5bRsIJ4w==",
"type": "package",
"path": "microsoft.extensions.dependencymodel/9.0.7",
"path": "microsoft.extensions.dependencymodel/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2611,15 +2746,53 @@
"lib/net9.0/Microsoft.Extensions.DependencyModel.xml",
"lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll",
"lib/netstandard2.0/Microsoft.Extensions.DependencyModel.xml",
"microsoft.extensions.dependencymodel.9.0.7.nupkg.sha512",
"microsoft.extensions.dependencymodel.9.0.8.nupkg.sha512",
"microsoft.extensions.dependencymodel.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Logging/9.0.7": {
"sha512": "fdIeQpXYV8yxSWG03cCbU2Otdrq4NWuhnQLXokWLv3L9YcK055E7u8WFJvP+uuP4CFeCEoqZQL4yPcjuXhCZrg==",
"Microsoft.Extensions.Identity.Core/9.0.8": {
"sha512": "giUYz84GHAizDucZp5vWAusDO2s9Jrrg2jQ6HUQNGs5HQMKJVobLPMQSiyg8R4yecH0pIc0QjANh0B/Kw13BHA==",
"type": "package",
"path": "microsoft.extensions.logging/9.0.7",
"path": "microsoft.extensions.identity.core/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"THIRD-PARTY-NOTICES.TXT",
"lib/net462/Microsoft.Extensions.Identity.Core.dll",
"lib/net462/Microsoft.Extensions.Identity.Core.xml",
"lib/net9.0/Microsoft.Extensions.Identity.Core.dll",
"lib/net9.0/Microsoft.Extensions.Identity.Core.xml",
"lib/netstandard2.0/Microsoft.Extensions.Identity.Core.dll",
"lib/netstandard2.0/Microsoft.Extensions.Identity.Core.xml",
"microsoft.extensions.identity.core.9.0.8.nupkg.sha512",
"microsoft.extensions.identity.core.nuspec"
]
},
"Microsoft.Extensions.Identity.Stores/9.0.8": {
"sha512": "sycaHcq78yI591+KxEdd53a7pJGQEl9H/wDsFkaPNE9g7loyq8vufPcc/9RH3KlGt5joR5Ey7PdoRSrlLjCgJg==",
"type": "package",
"path": "microsoft.extensions.identity.stores/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"THIRD-PARTY-NOTICES.TXT",
"lib/net462/Microsoft.Extensions.Identity.Stores.dll",
"lib/net462/Microsoft.Extensions.Identity.Stores.xml",
"lib/net9.0/Microsoft.Extensions.Identity.Stores.dll",
"lib/net9.0/Microsoft.Extensions.Identity.Stores.xml",
"lib/netstandard2.0/Microsoft.Extensions.Identity.Stores.dll",
"lib/netstandard2.0/Microsoft.Extensions.Identity.Stores.xml",
"microsoft.extensions.identity.stores.9.0.8.nupkg.sha512",
"microsoft.extensions.identity.stores.nuspec"
]
},
"Microsoft.Extensions.Logging/9.0.8": {
"sha512": "Z/7ze+0iheT7FJeZPqJKARYvyC2bmwu3whbm/48BJjdlGVvgDguoCqJIkI/67NkroTYobd5geai1WheNQvWrgA==",
"type": "package",
"path": "microsoft.extensions.logging/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2641,15 +2814,15 @@
"lib/netstandard2.0/Microsoft.Extensions.Logging.xml",
"lib/netstandard2.1/Microsoft.Extensions.Logging.dll",
"lib/netstandard2.1/Microsoft.Extensions.Logging.xml",
"microsoft.extensions.logging.9.0.7.nupkg.sha512",
"microsoft.extensions.logging.9.0.8.nupkg.sha512",
"microsoft.extensions.logging.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Logging.Abstractions/9.0.7": {
"sha512": "sMM6NEAdUTE/elJ2wqjOi0iBWqZmSyaTByLF9e8XHv6DRJFFnOe0N+s8Uc6C91E4SboQCfLswaBIZ+9ZXA98AA==",
"Microsoft.Extensions.Logging.Abstractions/9.0.8": {
"sha512": "pYnAffJL7ARD/HCnnPvnFKSIHnTSmWz84WIlT9tPeQ4lHNiu0Az7N/8itihWvcF8sT+VVD5lq8V+ckMzu4SbOw==",
"type": "package",
"path": "microsoft.extensions.logging.abstractions/9.0.7",
"path": "microsoft.extensions.logging.abstractions/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2712,15 +2885,15 @@
"lib/net9.0/Microsoft.Extensions.Logging.Abstractions.xml",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
"microsoft.extensions.logging.abstractions.9.0.7.nupkg.sha512",
"microsoft.extensions.logging.abstractions.9.0.8.nupkg.sha512",
"microsoft.extensions.logging.abstractions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Options/9.0.7": {
"sha512": "trJnF6cRWgR5uMmHpGoHmM1wOVFdIYlELlkO9zX+RfieK0321Y55zrcs4AaEymKup7dxgEN/uJU25CAcMNQRXw==",
"Microsoft.Extensions.Options/9.0.8": {
"sha512": "OmTaQ0v4gxGQkehpwWIqPoEiwsPuG/u4HUsbOFoWGx4DKET2AXzopnFe/fE608FIhzc/kcg2p8JdyMRCCUzitQ==",
"type": "package",
"path": "microsoft.extensions.options/9.0.7",
"path": "microsoft.extensions.options/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2757,15 +2930,15 @@
"lib/netstandard2.0/Microsoft.Extensions.Options.xml",
"lib/netstandard2.1/Microsoft.Extensions.Options.dll",
"lib/netstandard2.1/Microsoft.Extensions.Options.xml",
"microsoft.extensions.options.9.0.7.nupkg.sha512",
"microsoft.extensions.options.9.0.8.nupkg.sha512",
"microsoft.extensions.options.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Primitives/9.0.7": {
"sha512": "ti/zD9BuuO50IqlvhWQs9GHxkCmoph5BHjGiWKdg2t6Or8XoyAfRJiKag+uvd/fpASnNklfsB01WpZ4fhAe0VQ==",
"Microsoft.Extensions.Primitives/9.0.8": {
"sha512": "tizSIOEsIgSNSSh+hKeUVPK7xmTIjR8s+mJWOu1KXV3htvNQiPMFRMO17OdI1y/4ZApdBVk49u/08QGC9yvLug==",
"type": "package",
"path": "microsoft.extensions.primitives/9.0.7",
"path": "microsoft.extensions.primitives/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -2785,7 +2958,7 @@
"lib/net9.0/Microsoft.Extensions.Primitives.xml",
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll",
"lib/netstandard2.0/Microsoft.Extensions.Primitives.xml",
"microsoft.extensions.primitives.9.0.7.nupkg.sha512",
"microsoft.extensions.primitives.9.0.8.nupkg.sha512",
"microsoft.extensions.primitives.nuspec",
"useSharedDesignerContext.txt"
]
@@ -3653,10 +3826,10 @@
"version.txt"
]
},
"System.Text.Json/9.0.7": {
"sha512": "u/lN2FEEXs3ghj2ta8tWA4r2MS9Yni07K7jDmnz8h1UPDf0lIIIEMkWx383Zz4fJjJio7gDl+00RYuQ/7R8ZQw==",
"System.Text.Json/9.0.8": {
"sha512": "mIQir9jBqk0V7X0Nw5hzPJZC8DuGdf+2DS3jAVsr6rq5+/VyH5rza0XGcONJUWBrZ+G6BCwNyjWYd9lncBu48A==",
"type": "package",
"path": "system.text.json/9.0.7",
"path": "system.text.json/9.0.8",
"files": [
".nupkg.metadata",
".signature.p7s",
@@ -3719,7 +3892,7 @@
"lib/net9.0/System.Text.Json.xml",
"lib/netstandard2.0/System.Text.Json.dll",
"lib/netstandard2.0/System.Text.Json.xml",
"system.text.json.9.0.7.nupkg.sha512",
"system.text.json.9.0.8.nupkg.sha512",
"system.text.json.nuspec",
"useSharedDesignerContext.txt"
]
@@ -3780,9 +3953,10 @@
"projectFileDependencyGroups": {
"net9.0": [
"EntityFramework >= 6.5.1",
"Microsoft.EntityFrameworkCore >= 9.0.7",
"Microsoft.EntityFrameworkCore.Design >= 9.0.7",
"Microsoft.Extensions.DependencyInjection.Abstractions >= 9.0.7",
"Microsoft.AspNetCore.Identity.EntityFrameworkCore >= 9.0.8",
"Microsoft.EntityFrameworkCore >= 9.0.8",
"Microsoft.EntityFrameworkCore.Design >= 9.0.8",
"Microsoft.Extensions.DependencyInjection.Abstractions >= 9.0.8",
"Npgsql >= 9.0.3",
"Npgsql.EntityFrameworkCore.PostgreSQL >= 9.0.4"
]
@@ -3794,17 +3968,17 @@
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "E:\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"projectUniqueName": "D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"projectName": "OpenArchival.DataAccess",
"projectPath": "E:\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"projectPath": "D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\OpenArchival.DataAccess.csproj",
"packagesPath": "C:\\Users\\Vincent Allen\\.nuget\\packages\\",
"outputPath": "E:\\Open-Archival\\OpenArchival.DataAccess\\obj\\",
"outputPath": "D:\\Nextcloud\\Documents\\Open-Archival\\OpenArchival.DataAccess\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"E:\\Open-Archival\\NuGet.Config",
"D:\\Nextcloud\\Documents\\Open-Archival\\NuGet.Config",
"C:\\Users\\Vincent Allen\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
@@ -3842,19 +4016,23 @@
"target": "Package",
"version": "[6.5.1, )"
},
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": {
"target": "Package",
"version": "[9.0.8, )"
},
"Microsoft.EntityFrameworkCore": {
"target": "Package",
"version": "[9.0.7, )"
"version": "[9.0.8, )"
},
"Microsoft.EntityFrameworkCore.Design": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
"suppressParent": "All",
"target": "Package",
"version": "[9.0.7, )"
"version": "[9.0.8, )"
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"target": "Package",
"version": "[9.0.7, )"
"version": "[9.0.8, )"
},
"Npgsql": {
"target": "Package",
@@ -3884,7 +4062,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.302/PortableRuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
}
}
}

Some files were not shown because too many files have changed in this diff Show More