diff --git a/RomRepoMgr.Database/Context.cs b/RomRepoMgr.Database/Context.cs
index af47c22..e2a5ab6 100644
--- a/RomRepoMgr.Database/Context.cs
+++ b/RomRepoMgr.Database/Context.cs
@@ -84,6 +84,8 @@ namespace RomRepoMgr.Database
{
entity.HasIndex(e => e.Crc32);
+ entity.HasIndex(e => e.Md5);
+
entity.HasIndex(e => e.Sha1);
entity.HasIndex(e => e.Sha256);
diff --git a/RomRepoMgr.Database/Migrations/20200904011556_AddMd5IndexToFiles.Designer.cs b/RomRepoMgr.Database/Migrations/20200904011556_AddMd5IndexToFiles.Designer.cs
new file mode 100644
index 0000000..37ef3a3
--- /dev/null
+++ b/RomRepoMgr.Database/Migrations/20200904011556_AddMd5IndexToFiles.Designer.cs
@@ -0,0 +1,313 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using RomRepoMgr.Database;
+
+namespace RomRepoMgr.Database.Migrations
+{
+ [DbContext(typeof(Context))]
+ [Migration("20200904011556_AddMd5IndexToFiles")]
+ partial class AddMd5IndexToFiles
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.7");
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.DbDisk", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("CreatedOn")
+ .HasColumnType("TEXT");
+
+ b.Property("IsInRepo")
+ .HasColumnType("INTEGER");
+
+ b.Property("Md5")
+ .HasColumnType("TEXT")
+ .HasMaxLength(32);
+
+ b.Property("OriginalFileName")
+ .HasColumnType("TEXT");
+
+ b.Property("Sha1")
+ .HasColumnType("TEXT")
+ .HasMaxLength(40);
+
+ b.Property("Size")
+ .HasColumnType("INTEGER");
+
+ b.Property("UpdatedOn")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Md5");
+
+ b.HasIndex("Sha1");
+
+ b.HasIndex("Size");
+
+ b.ToTable("Disks");
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.DbFile", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Crc32")
+ .HasColumnType("TEXT")
+ .HasMaxLength(8);
+
+ b.Property("CreatedOn")
+ .HasColumnType("TEXT");
+
+ b.Property("IsInRepo")
+ .HasColumnType("INTEGER");
+
+ b.Property("Md5")
+ .HasColumnType("TEXT")
+ .HasMaxLength(32);
+
+ b.Property("OriginalFileName")
+ .HasColumnType("TEXT");
+
+ b.Property("Sha1")
+ .HasColumnType("TEXT")
+ .HasMaxLength(40);
+
+ b.Property("Sha256")
+ .HasColumnType("TEXT")
+ .HasMaxLength(64);
+
+ b.Property("Sha384")
+ .HasColumnType("TEXT")
+ .HasMaxLength(96);
+
+ b.Property("Sha512")
+ .HasColumnType("TEXT")
+ .HasMaxLength(128);
+
+ b.Property("Size")
+ .HasColumnType("INTEGER");
+
+ b.Property("UpdatedOn")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Crc32");
+
+ b.HasIndex("Md5");
+
+ b.HasIndex("Sha1");
+
+ b.HasIndex("Sha256");
+
+ b.HasIndex("Sha384");
+
+ b.HasIndex("Sha512");
+
+ b.HasIndex("Size");
+
+ b.ToTable("Files");
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.DiskByMachine", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("DiskId")
+ .HasColumnType("INTEGER");
+
+ b.Property("MachineId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("DiskId");
+
+ b.HasIndex("MachineId");
+
+ b.HasIndex("Name");
+
+ b.ToTable("DisksByMachines");
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.FileByMachine", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("FileId")
+ .HasColumnType("INTEGER");
+
+ b.Property("MachineId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FileId");
+
+ b.HasIndex("MachineId");
+
+ b.HasIndex("Name");
+
+ b.ToTable("FilesByMachines");
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.Machine", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("CreatedOn")
+ .HasColumnType("TEXT");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("RomSetId")
+ .HasColumnType("INTEGER");
+
+ b.Property("UpdatedOn")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name");
+
+ b.HasIndex("RomSetId");
+
+ b.ToTable("Machines");
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.RomSet", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Author")
+ .HasColumnType("TEXT");
+
+ b.Property("Comment")
+ .HasColumnType("TEXT");
+
+ b.Property("CreatedOn")
+ .HasColumnType("TEXT");
+
+ b.Property("Date")
+ .HasColumnType("TEXT");
+
+ b.Property("Description")
+ .HasColumnType("TEXT");
+
+ b.Property("Filename")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Homepage")
+ .HasColumnType("TEXT");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("Sha384")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasMaxLength(96);
+
+ b.Property("UpdatedOn")
+ .HasColumnType("TEXT");
+
+ b.Property("Version")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Author");
+
+ b.HasIndex("Comment");
+
+ b.HasIndex("Date");
+
+ b.HasIndex("Description");
+
+ b.HasIndex("Filename");
+
+ b.HasIndex("Homepage");
+
+ b.HasIndex("Name");
+
+ b.HasIndex("Sha384");
+
+ b.HasIndex("Version");
+
+ b.ToTable("RomSets");
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.DiskByMachine", b =>
+ {
+ b.HasOne("RomRepoMgr.Database.Models.DbDisk", "Disk")
+ .WithMany("Machines")
+ .HasForeignKey("DiskId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("RomRepoMgr.Database.Models.Machine", "Machine")
+ .WithMany("Disks")
+ .HasForeignKey("MachineId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.FileByMachine", b =>
+ {
+ b.HasOne("RomRepoMgr.Database.Models.DbFile", "File")
+ .WithMany("Machines")
+ .HasForeignKey("FileId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("RomRepoMgr.Database.Models.Machine", "Machine")
+ .WithMany("Files")
+ .HasForeignKey("MachineId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("RomRepoMgr.Database.Models.Machine", b =>
+ {
+ b.HasOne("RomRepoMgr.Database.Models.RomSet", "RomSet")
+ .WithMany("Machines")
+ .HasForeignKey("RomSetId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/RomRepoMgr.Database/Migrations/20200904011556_AddMd5IndexToFiles.cs b/RomRepoMgr.Database/Migrations/20200904011556_AddMd5IndexToFiles.cs
new file mode 100644
index 0000000..84008b5
--- /dev/null
+++ b/RomRepoMgr.Database/Migrations/20200904011556_AddMd5IndexToFiles.cs
@@ -0,0 +1,13 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace RomRepoMgr.Database.Migrations
+{
+ public partial class AddMd5IndexToFiles : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder) =>
+ migrationBuilder.CreateIndex("IX_Files_Md5", "Files", "Md5");
+
+ protected override void Down(MigrationBuilder migrationBuilder) =>
+ migrationBuilder.DropIndex("IX_Files_Md5", "Files");
+ }
+}
\ No newline at end of file
diff --git a/RomRepoMgr.Database/Migrations/ContextModelSnapshot.cs b/RomRepoMgr.Database/Migrations/ContextModelSnapshot.cs
index f35166f..e24a285 100644
--- a/RomRepoMgr.Database/Migrations/ContextModelSnapshot.cs
+++ b/RomRepoMgr.Database/Migrations/ContextModelSnapshot.cs
@@ -73,6 +73,8 @@ namespace RomRepoMgr.Database.Migrations
b.HasIndex("Crc32");
+ b.HasIndex("Md5");
+
b.HasIndex("Sha1");
b.HasIndex("Sha256");