From f31b3187e8fc6deb73dcaa07960c2a0e5ee86bb6 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 3 Apr 2023 16:20:03 +0200 Subject: [PATCH] Vocabolario: - Fix creazione tab + stored - modifica metodo upsert --- .../Controllers/WebDoorCreatorController.cs | 62 +- ...20230403140917_VocabularySetup.Designer.cs | 763 ++++++++++++++++++ .../WDCData/20230403140917_VocabularySetup.cs | 66 ++ .../WDCData/WDCDataContextModelSnapshot.cs | 58 +- .../SqlScripts/Stored/stp_Voc_Import.sql | 22 + .../SqlScripts/Stored/stp_Voc_Prepare.sql | 29 + 6 files changed, 951 insertions(+), 49 deletions(-) create mode 100644 WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.Designer.cs create mode 100644 WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.cs create mode 100644 WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Import.sql create mode 100644 WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Prepare.sql diff --git a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs index 673efe9..5172253 100644 --- a/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs +++ b/WebDoorCreator.Data/Controllers/WebDoorCreatorController.cs @@ -3,8 +3,11 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using NLog; using System.Collections.Generic; +using System.ComponentModel.Design; +using System.Data; using WebDoorCreator.Data.DbModels; using WebDoorCreator.Data.DTO; +using static WebDoorCreator.Core.Enum; namespace WebDoorCreator.Data.Controllers { @@ -676,8 +679,8 @@ namespace WebDoorCreator.Data.Controllers try { dbCtx - .Database - .ExecuteSqlRaw("EXEC man.[stp_TruncTables]"); + .Database + .ExecuteSqlRaw("EXEC man.[stp_TruncTables]"); dbResult = true; } @@ -836,55 +839,34 @@ namespace WebDoorCreator.Data.Controllers /// /// Aggiunta di un nuovo set di lemmi /// - /// + /// /// - public async Task VocLemmaInsert(List newVocLemma) + public async Task VocLemmaInsert(List listNewTerms) { bool fatto = false; - List list2Ins = new List(); - List list2Upd = new List(); using (WDCDataContext localDbCtx = new WDCDataContext(_configuration)) { try { - var lisKey = localDbCtx - .DbSetVocabulary - .ToList(); - - foreach (var item in newVocLemma) - { - var trovato = lisKey.Where(x => x.Lingua == item.Lingua && x.Lemma == item.Lemma).FirstOrDefault(); - - if (trovato == null) - { - list2Ins.Add(item); - } - else - { - if (trovato.Traduzione != item.Traduzione) - { - list2Upd.Add(item); - } - } - } - - //aggiungo i mancanti + // stored di reset vocabolario + var storedRes = localDbCtx + .Database + .ExecuteSqlRaw("exec dbo.stp_Voc_Prepare"); + // import massivo dati in tab temp localDbCtx - .DbSetVocabulary - .AddRange(list2Ins); + .DbSetVocabularyTemp + .AddRange(listNewTerms); + + localDbCtx.SaveChanges(); + + + // stored di merge dati in vocabolario + storedRes = localDbCtx + .Database + .ExecuteSqlRaw("exec dbo.stp_Voc_Import"); - foreach (var item in list2Upd) - { - var trovato = newVocLemma.Where(x => x.Lingua == item.Lingua && x.Lemma == item.Lemma).FirstOrDefault(); - if (trovato != null) - { - trovato.Traduzione = item.Traduzione; - localDbCtx.Entry(trovato).State = EntityState.Modified; - } - } - await localDbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) diff --git a/WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.Designer.cs b/WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.Designer.cs new file mode 100644 index 0000000..b430324 --- /dev/null +++ b/WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.Designer.cs @@ -0,0 +1,763 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WebDoorCreator.Data; + +#nullable disable + +namespace WebDoorCreator.Data.Migrations.WDCData +{ + [DbContext(typeof(WDCDataContext))] + [Migration("20230403140917_VocabularySetup")] + partial class VocabularySetup + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseCollation("Latin1_General_CI_AS") + .HasAnnotation("ProductVersion", "6.0.14") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetRoles", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("AspNetRoles", null, t => t.ExcludeFromMigrations()); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", null, t => t.ExcludeFromMigrations()); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUsers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("AspNetUsers", null, t => t.ExcludeFromMigrations()); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.CompanyModel", b => + { + b.Property("CompanyId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("CompanyId"), 1L, 1); + + b.Property("Address") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("City") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CompanyExtCode") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("CompanyName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("CompanyToken") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("PrivateNote") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("State") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("VAT") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ZipCode") + .HasColumnType("int"); + + b.HasKey("CompanyId"); + + b.ToTable("Company"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b => + { + b.Property("DoorId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("DoorId"), 1L, 1); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("DateLockExpiry") + .HasColumnType("datetime2"); + + b.Property("DateMod") + .HasColumnType("datetime2"); + + b.Property("DoorDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DoorExtCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MeasureUnit") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("Quantity") + .HasColumnType("int"); + + b.Property("TypeId") + .HasColumnType("int"); + + b.Property("UnitCost") + .HasColumnType("decimal(18,2)"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdLock") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("DoorId"); + + b.HasIndex("OrderId"); + + b.HasIndex("TypeId"); + + b.ToTable("Door"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b => + { + b.Property("DoorOpId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("DoorOpId"), 1L, 1); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("DateMod") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DoorId") + .HasColumnType("int"); + + b.Property("DoorOpTypId") + .HasColumnType("int"); + + b.Property("JsoncConfigVal") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("DoorOpId"); + + b.HasIndex("DoorId"); + + b.HasIndex("DoorOpTypId"); + + b.ToTable("DoorOp"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpTypeModel", b => + { + b.Property("DoorOpTypId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("DoorOpTypId"), 1L, 1); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DoorOpIdPathFromPatriarch") + .HasColumnType("hierarchyid"); + + b.Property("ExtDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ExtOpCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FPath") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HasHw") + .HasColumnType("bit"); + + b.Property("HwCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HwDescription") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsConcrete") + .HasColumnType("bit"); + + b.Property("IsDefault") + .HasColumnType("bit"); + + b.Property("JsoncConfig") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MaxAllowed") + .HasColumnType("int"); + + b.Property("OpCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentDoorOpId") + .HasColumnType("int"); + + b.Property("Rev") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ValidFrom") + .HasColumnType("datetime2"); + + b.Property("ValidUntil") + .HasColumnType("datetime2"); + + b.HasKey("DoorOpTypId"); + + b.ToTable("DoorOpType"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorTypeModel", b => + { + b.Property("TypeId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("TypeId"), 1L, 1); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TypeCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("TypeId"); + + b.ToTable("DoorType"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.GraphicParamsModel", b => + { + b.Property("GraphicParamId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("GraphicParamId"), 1L, 1); + + b.Property("compoId") + .HasColumnType("int"); + + b.Property("graphicParamAlias") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamDefaultVal") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamKey") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("graphicParamsN") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("GraphicParamId"); + + b.ToTable("GraphicParams"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.HardwareModel", b => + { + b.Property("HardwareId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("HardwareId"), 1L, 1); + + b.Property("compoAlias") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("compoLayerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("compoName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("compoTemplateIsActive") + .HasColumnType("bit"); + + b.HasKey("HardwareId"); + + b.ToTable("Hardware"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesModel", b => + { + b.Property("TableName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("FieldName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("value") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("label") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ordinal") + .HasColumnType("int"); + + b.HasKey("TableName", "FieldName", "value"); + + b.ToTable("ListValues"); + + b.HasData( + new + { + TableName = "Opening", + FieldName = "Swing", + value = "LH", + label = "Left Handed", + ordinal = 1 + }, + new + { + TableName = "Opening", + FieldName = "Swing", + value = "RH", + label = "Right Handed", + ordinal = 2 + }, + new + { + TableName = "Opening", + FieldName = "Swing", + value = "LHR", + label = "Left Handed Reverse", + ordinal = 3 + }, + new + { + TableName = "Opening", + FieldName = "Swing", + value = "RHR", + label = "Right Handed Reverse", + ordinal = 4 + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + value = "BV", + label = "Bevel", + ordinal = 1 + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + value = "SQ", + label = "Squared", + ordinal = 2 + }, + new + { + TableName = "Edges", + FieldName = "EdgeType", + value = "1B", + label = "Bull Nose 1", + ordinal = 3 + }); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b => + { + b.Property("OrderId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderId"), 1L, 1); + + b.Property("CompanyId") + .HasColumnType("int"); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("DateMod") + .HasColumnType("datetime2"); + + b.Property("OrderDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderExtCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("OrderId"); + + b.HasIndex("CompanyId"); + + b.ToTable("Order"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderStatusViewModel", b => + { + b.Property("OrderId") + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("OrderId"), 1L, 1); + + b.Property("CompanyId") + .HasColumnType("int"); + + b.Property("DateIns") + .HasColumnType("datetime2"); + + b.Property("NumDoors") + .HasColumnType("int"); + + b.Property("NumType") + .HasColumnType("int"); + + b.Property("OrderDescript") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderExtCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderStatus") + .HasColumnType("int"); + + b.Property("TotCost") + .HasColumnType("decimal(18,2)"); + + b.Property("UserIdIns") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserIdMod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("OrderId"); + + b.ToView("OrderStatusViewModel"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.UsersViewModel", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "RoleId"); + + b.ToView("UsersViewModel"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyModel", b => + { + b.Property("Lingua") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Lemma") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Traduzione") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Lingua", "Lemma"); + + b.ToTable("Vocabulary"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyTempModel", b => + { + b.Property("Lingua") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Lemma") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Traduzione") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Lingua", "Lemma"); + + b.ToTable("VocabularyTemp"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.AspNetRoles", "RolesNav") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WebDoorCreator.Data.DbModels.AspNetUsers", "UsersNav") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RolesNav"); + + b.Navigation("UsersNav"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.OrderModel", "OrderNav") + .WithMany() + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WebDoorCreator.Data.DbModels.DoorTypeModel", "TypeNav") + .WithMany() + .HasForeignKey("TypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OrderNav"); + + b.Navigation("TypeNav"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.DoorModel", "DoorNav") + .WithMany() + .HasForeignKey("DoorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WebDoorCreator.Data.DbModels.DoorOpTypeModel", "DoorOpTypeNav") + .WithMany() + .HasForeignKey("DoorOpTypId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DoorNav"); + + b.Navigation("DoorOpTypeNav"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b => + { + b.HasOne("WebDoorCreator.Data.DbModels.CompanyModel", "CompanyNav") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyNav"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.cs b/WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.cs new file mode 100644 index 0000000..763bafa --- /dev/null +++ b/WebDoorCreator.Data/Migrations/WDCData/20230403140917_VocabularySetup.cs @@ -0,0 +1,66 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace WebDoorCreator.Data.Migrations.WDCData +{ + public partial class VocabularySetup : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Vocabulary", + columns: table => new + { + Lingua = table.Column(type: "nvarchar(5)", maxLength: 5, nullable: false), + Lemma = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Traduzione = table.Column(type: "nvarchar(250)", maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Vocabulary", x => new { x.Lingua, x.Lemma }); + }); + + migrationBuilder.CreateTable( + name: "VocabularyTemp", + columns: table => new + { + Lingua = table.Column(type: "nvarchar(5)", maxLength: 5, nullable: false), + Lemma = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Traduzione = table.Column(type: "nvarchar(250)", maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_VocabularyTemp", x => new { x.Lingua, x.Lemma }); + }); + + + addStored(migrationBuilder, "stp_Voc_Prepare"); + addStored(migrationBuilder, "stp_Voc_Import"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Vocabulary"); + + migrationBuilder.DropTable( + name: "VocabularyTemp"); + + remStored(migrationBuilder, "stp_Voc_Prepare"); + remStored(migrationBuilder, "stp_Voc_Import"); + } + + private void addStored(MigrationBuilder migrationBuilder, string viewName) + { + string path = Path.Combine("SqlScripts", "Stored", $"{viewName}.sql"); + string viewBody = File.ReadAllText(path); + migrationBuilder.Sql(viewBody); + } + + private void remStored(MigrationBuilder migrationBuilder, string viewName) + { + migrationBuilder.Sql($"exec('DROP PROCEDURE dbo.{viewName}');"); + } + } +} diff --git a/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs b/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs index 432fc82..65a23f8 100644 --- a/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs +++ b/WebDoorCreator.Data/Migrations/WDCData/WDCDataContextModelSnapshot.cs @@ -174,7 +174,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasKey("CompanyId"); - b.ToTable("Company", (string)null); + b.ToTable("Company"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b => @@ -236,7 +236,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasIndex("TypeId"); - b.ToTable("Door", (string)null); + b.ToTable("Door"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b => @@ -281,7 +281,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasIndex("DoorOpTypId"); - b.ToTable("DoorOp", (string)null); + b.ToTable("DoorOp"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpTypeModel", b => @@ -358,7 +358,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasKey("DoorOpTypId"); - b.ToTable("DoorOpType", (string)null); + b.ToTable("DoorOpType"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorTypeModel", b => @@ -379,7 +379,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasKey("TypeId"); - b.ToTable("DoorType", (string)null); + b.ToTable("DoorType"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.GraphicParamsModel", b => @@ -419,7 +419,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasKey("GraphicParamId"); - b.ToTable("GraphicParams", (string)null); + b.ToTable("GraphicParams"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.HardwareModel", b => @@ -447,7 +447,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasKey("HardwareId"); - b.ToTable("Hardware", (string)null); + b.ToTable("Hardware"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesModel", b => @@ -473,7 +473,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasKey("TableName", "FieldName", "value"); - b.ToTable("ListValues", (string)null); + b.ToTable("ListValues"); b.HasData( new @@ -574,7 +574,7 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.HasIndex("CompanyId"); - b.ToTable("Order", (string)null); + b.ToTable("Order"); }); modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderStatusViewModel", b => @@ -648,6 +648,46 @@ namespace WebDoorCreator.Data.Migrations.WDCData b.ToView("UsersViewModel"); }); + modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyModel", b => + { + b.Property("Lingua") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Lemma") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Traduzione") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Lingua", "Lemma"); + + b.ToTable("Vocabulary"); + }); + + modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyTempModel", b => + { + b.Property("Lingua") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Lemma") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Traduzione") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Lingua", "Lemma"); + + b.ToTable("VocabularyTemp"); + }); + modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b => { b.HasOne("WebDoorCreator.Data.DbModels.AspNetRoles", "RolesNav") diff --git a/WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Import.sql b/WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Import.sql new file mode 100644 index 0000000..4dce251 --- /dev/null +++ b/WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Import.sql @@ -0,0 +1,22 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: S.E.L. +-- Create date: 2023.04.03 +-- Description: Esecuzione preparazione tab temp x import vocabolario +-- ============================================= +ALTER PROCEDURE [dbo].[stp_Voc_Prepare] +AS +BEGIN + SET NOCOUNT ON; + + BEGIN tran + + -- effettua preparazione tab appoggio + TRUNCATE TABLE VocabularyTemp + + COMMIT tran + +END \ No newline at end of file diff --git a/WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Prepare.sql b/WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Prepare.sql new file mode 100644 index 0000000..af69d73 --- /dev/null +++ b/WebDoorCreator.Data/SqlScripts/Stored/stp_Voc_Prepare.sql @@ -0,0 +1,29 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: S.E.L. +-- Create date: 2023.04.03 +-- Description: Esecuzione upsert vocabolario +-- ============================================= +ALTER PROCEDURE [dbo].[stp_Voc_Import] +AS +BEGIN + SET NOCOUNT ON; + + BEGIN tran + + -- effettua merge dati vocabolario + MERGE Vocabulary as tgt + USING (SELECT Lingua, Lemma, Traduzione FROM VocabularyTemp) as src + ON tgt.Lemma = src.Lemma AND tgt.Lingua = src.Lingua + WHEN MATCHED THEN + UPDATE SET Traduzione = Traduzione + WHEN NOT MATCHED THEN + INSERT (Lingua, Lemma, Traduzione) + VALUES (Lingua, Lemma, Traduzione); + + COMMIT tran + +END \ No newline at end of file