Use bulk insertions to SQL.

This commit is contained in:
2020-09-06 17:24:32 +01:00
parent 93566e8a53
commit 7f24956ddd
9 changed files with 55 additions and 15 deletions

3
.gitmodules vendored
View File

@@ -4,3 +4,6 @@
[submodule "winfsp"] [submodule "winfsp"]
path = winfsp path = winfsp
url = https://github.com/billziss-gh/winfsp/ url = https://github.com/billziss-gh/winfsp/
[submodule "EFCore.BulkExtensions"]
path = EFCore.BulkExtensions
url = https://github.com/claunia/EFCore.BulkExtensions

1
EFCore.BulkExtensions Submodule

Submodule EFCore.BulkExtensions added at 39aa76658c

View File

@@ -29,6 +29,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using Aaru.Checksums; using Aaru.Checksums;
using EFCore.BulkExtensions;
using RomRepoMgr.Core.EventArgs; using RomRepoMgr.Core.EventArgs;
using RomRepoMgr.Core.Models; using RomRepoMgr.Core.Models;
using RomRepoMgr.Core.Resources; using RomRepoMgr.Core.Resources;
@@ -165,14 +166,13 @@ namespace RomRepoMgr.Core.Workers
var machine = new Machine var machine = new Machine
{ {
Name = name, Name = name,
RomSet = romSet, RomSetId = romSet.Id,
CreatedOn = DateTime.UtcNow, CreatedOn = DateTime.UtcNow,
UpdatedOn = DateTime.UtcNow UpdatedOn = DateTime.UtcNow
}; };
machines[name] = machine; machines[name] = machine;
ctx.Machines.Add(machine);
position++; position++;
} }
@@ -183,6 +183,7 @@ namespace RomRepoMgr.Core.Workers
SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty); SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty);
ctx.BulkInsert(machines.Values.ToList(), b => b.SetOutputIdentity = true);
ctx.SaveChanges(); ctx.SaveChanges();
SetMessage?.Invoke(this, new MessageEventArgs SetMessage?.Invoke(this, new MessageEventArgs
@@ -441,8 +442,15 @@ namespace RomRepoMgr.Core.Workers
SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty); SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty);
ctx.Files.AddRange(newFiles); ctx.BulkInsert(newFiles, b => b.SetOutputIdentity = true);
ctx.FilesByMachines.AddRange(newFilesByMachine);
foreach(FileByMachine fbm in newFilesByMachine)
{
fbm.FileId = fbm.File.Id;
fbm.MachineId = fbm.Machine.Id;
}
ctx.BulkInsert(newFilesByMachine);
ctx.SaveChanges(); ctx.SaveChanges();
@@ -562,8 +570,15 @@ namespace RomRepoMgr.Core.Workers
SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty); SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty);
ctx.Disks.AddRange(newDisks); ctx.BulkInsert(newDisks, b => b.SetOutputIdentity = true);
ctx.DisksByMachines.AddRange(newDisksByMachine);
foreach(DiskByMachine dbm in newDisksByMachine)
{
dbm.DiskId = dbm.Disk.Id;
dbm.MachineId = dbm.Machine.Id;
}
ctx.BulkInsert(newDisksByMachine);
ctx.SaveChanges(); ctx.SaveChanges();
@@ -697,8 +712,15 @@ namespace RomRepoMgr.Core.Workers
SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty); SetIndeterminateProgress?.Invoke(this, System.EventArgs.Empty);
ctx.Medias.AddRange(newMedias); ctx.BulkInsert(newMedias, b => b.SetOutputIdentity = true);
ctx.MediasByMachines.AddRange(newMediasByMachine);
foreach(MediaByMachine mbm in newMediasByMachine)
{
mbm.MediaId = mbm.Media.Id;
mbm.MachineId = mbm.Machine.Id;
}
ctx.BulkInsert(newMediasByMachine);
ctx.SaveChanges(); ctx.SaveChanges();

View File

@@ -36,6 +36,8 @@ namespace RomRepoMgr.Database.Models
[Required] [Required]
public virtual Machine Machine { get; set; } public virtual Machine Machine { get; set; }
[Required] [Required]
public string Name { get; set; } public string Name { get; set; }
public ulong DiskId { get; set; }
public ulong MachineId { get; set; }
} }
} }

View File

@@ -36,6 +36,8 @@ namespace RomRepoMgr.Database.Models
[Required] [Required]
public virtual Machine Machine { get; set; } public virtual Machine Machine { get; set; }
[Required] [Required]
public string Name { get; set; } public string Name { get; set; }
public ulong FileId { get; set; }
public ulong MachineId { get; set; }
} }
} }

View File

@@ -33,9 +33,10 @@ namespace RomRepoMgr.Database.Models
[Required] [Required]
public string Name { get; set; } public string Name { get; set; }
[Required] [Required]
public virtual RomSet RomSet { get; set; } public virtual RomSet RomSet { get; set; }
public virtual ICollection<FileByMachine> Files { get; set; } public virtual ICollection<FileByMachine> Files { get; set; }
public virtual ICollection<DiskByMachine> Disks { get; set; } public virtual ICollection<DiskByMachine> Disks { get; set; }
public virtual ICollection<MediaByMachine> Medias { get; set; } public virtual ICollection<MediaByMachine> Medias { get; set; }
public long RomSetId { get; set; }
} }
} }

View File

@@ -36,6 +36,8 @@ namespace RomRepoMgr.Database.Models
[Required] [Required]
public virtual Machine Machine { get; set; } public virtual Machine Machine { get; set; }
[Required] [Required]
public string Name { get; set; } public string Name { get; set; }
public ulong MediaId { get; set; }
public ulong MachineId { get; set; }
} }
} }

View File

@@ -20,6 +20,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\EFCore.BulkExtensions\EFCore.BulkExtensions\EFCore.BulkExtensions.csproj" />
<ProjectReference Include="..\RomRepoMgr.Settings\RomRepoMgr.Settings.csproj" /> <ProjectReference Include="..\RomRepoMgr.Settings\RomRepoMgr.Settings.csproj" />
</ItemGroup> </ItemGroup>

View File

@@ -12,6 +12,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Library", "Sabre
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "winfsp-netcore", "winfsp-netcore\winfsp-netcore.csproj", "{4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "winfsp-netcore", "winfsp-netcore\winfsp-netcore.csproj", "{4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFCore.BulkExtensions", "EFCore.BulkExtensions\EFCore.BulkExtensions\EFCore.BulkExtensions.csproj", "{E17E880B-F3A7-4D0E-9583-A0645CE25135}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -42,5 +44,9 @@ Global
{4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}.Release|Any CPU.Build.0 = Release|Any CPU {4B2B4DAC-39E2-417D-90F2-DCC97A5564B1}.Release|Any CPU.Build.0 = Release|Any CPU
{E17E880B-F3A7-4D0E-9583-A0645CE25135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E17E880B-F3A7-4D0E-9583-A0645CE25135}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E17E880B-F3A7-4D0E-9583-A0645CE25135}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E17E880B-F3A7-4D0E-9583-A0645CE25135}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal