From 70cbef0efbc7452adab2f2094f9b320d785bda13 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 24 Aug 2023 17:19:10 +0200 Subject: [PATCH] DataLayer Update: - aggiunta nuovi campi - migration relative --- .../DatabaseModels/ProdModel.cs | 54 ++++++-- .../DatabaseModels/ProjModel.cs | 14 +- EgtBEAMWALL.DataLayer/DbConfig.cs | 2 +- .../EgtBEAMWALL.DataLayer.csproj | 7 + ...16227_AddProdStatusVarAndIndex.Designer.cs | 29 ++++ ...02308241516227_AddProdStatusVarAndIndex.cs | 42 ++++++ ...308241516227_AddProdStatusVarAndIndex.resx | 126 ++++++++++++++++++ 7 files changed, 256 insertions(+), 18 deletions(-) create mode 100644 EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.Designer.cs create mode 100644 EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.cs create mode 100644 EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.resx diff --git a/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs b/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs index 2acfaf80..093201f2 100644 --- a/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs +++ b/EgtBEAMWALL.DataLayer/DatabaseModels/ProdModel.cs @@ -8,6 +8,9 @@ using static EgtBEAMWALL.Core.ConstBeam; namespace EgtBEAMWALL.DataLayer.DatabaseModels { + // + // This is here so CodeMaid doesn't reorganize this document + // /// /// Tabella deiu raggruppamenti PROJ in forma di PROD /// @@ -16,12 +19,19 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels { #region Public Properties + /// + /// Chiave univoca DB + /// + [Key, Column("ProdDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int ProdDbId { get; set; } + [Column("Description")] public string Description { get; set; } = ""; /// /// Data Creazione /// + [Index] [Column("DtCreated")] public DateTime DtCreated { get; set; } @@ -37,6 +47,24 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels [Column("Lock")] public bool Locked { get; set; } = false; + /// + /// Chiave univoca per EgtBM + /// + [Column("Id")] + [Index] + public int ProdId { get; set; } + + /// + /// Tipologia del progetto (Travi, Pareti, ...) + /// + public BWType PType { get; set; } = BWType.NULL; + + /// + /// Macchina + /// + [Column("Machine")] + public string Machine { get; set; } = ""; + /// /// ID utente che ha bloccato (NumKey), quando aperto da un dispositivo in rete /// @@ -50,27 +78,25 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels public DateTime LockDate { get; set; } = DateTime.MinValue; /// - /// Macchina + /// Record attivo (se false == cancellazione logica) /// - [Column("Machine")] - public string Machine { get; set; } = ""; + [Index] + [Column("IsActive")] + public bool IsActive { get; set; } = true; /// - /// Chiave univoca DB + /// Stato Prodotto = inviato ALMENO UNA VOLTA al supervisore --> NON eliminabile se non in modo logico /// - [Key, Column("ProdDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int ProdDbId { get; set; } + [Index] + [Column("IsProduced")] + public bool IsProduced { get; set; } = false; /// - /// chiave univoca per EgtBM + /// Stato Archiviato = NON visualizzabile normalmente, già prodotto /// - [Column("Id")] - public int ProdId { get; set; } - - /// - /// Tipologia del progetto (Travi, Pareti, ...) - /// - public BWType PType { get; set; } = BWType.NULL; + [Index] + [Column("IsArchived")] + public bool IsArchived { get; set; } = false; #endregion Public Properties } diff --git a/EgtBEAMWALL.DataLayer/DatabaseModels/ProjModel.cs b/EgtBEAMWALL.DataLayer/DatabaseModels/ProjModel.cs index 39529925..4269ec9f 100644 --- a/EgtBEAMWALL.DataLayer/DatabaseModels/ProjModel.cs +++ b/EgtBEAMWALL.DataLayer/DatabaseModels/ProjModel.cs @@ -5,6 +5,9 @@ using static EgtBEAMWALL.Core.ConstBeam; namespace EgtBEAMWALL.DataLayer.DatabaseModels { + // + // This is here so CodeMaid doesn't reorganize this document + // /// /// Tabella dei PROJ caricati dal BTL /// @@ -13,6 +16,9 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels { #region Public Properties + [Key, Column("ProjDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int ProjDbId { get; set; } + [Column("BTLFileName")] public string BTLFileName { get; set; } = ""; @@ -20,23 +26,27 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels /// Data Creazione /// [Column("DtCreated")] + [Index] public DateTime DtCreated { get; set; } /// /// Data Esportazione /// [Column("DtExported")] + [Index] public DateTime DtExported { get; set; } /// /// Record attivo (se false == cancellazione logica) /// + [Index] [Column("IsActive")] public bool IsActive { get; set; } = true; /// /// Stato NEW = creato ma NON salvato /// + [Index] [Column("IsNew")] public bool IsNew { get; set; } = true; @@ -77,9 +87,6 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels [Column("ProdDbId")] public int? ProdDbId { get; set; } - [Key, Column("ProjDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int ProjDbId { get; set; } - /// /// Descrizione progetto (copiata da BTLFileName inizialmente) /// @@ -87,6 +94,7 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels public string ProjDescription { get; set; } = ""; [Column("Id")] + [Index] public int ProjId { get; set; } /// diff --git a/EgtBEAMWALL.DataLayer/DbConfig.cs b/EgtBEAMWALL.DataLayer/DbConfig.cs index 64947d18..c926356a 100644 --- a/EgtBEAMWALL.DataLayer/DbConfig.cs +++ b/EgtBEAMWALL.DataLayer/DbConfig.cs @@ -33,7 +33,7 @@ namespace EgtBEAMWALL.DataLayer public static string ADMIN_CONNECTION_STRING { get; set; } = ""; /// - /// DB Connection string, per effettuare migration riportare valore connessione admin cablato + /// DB Connection string, per effettuare migration riportare valore connessione admin cablato (con database=EgtBwDb_000102;) /// public static string CONNECTION_STRING { get; set; } = ""; diff --git a/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj b/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj index bb64eb8b..04faeae8 100644 --- a/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj +++ b/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj @@ -179,6 +179,10 @@ 202306081452095_UpdateProjModel.cs + + + 202308241516227_AddProdStatusVarAndIndex.cs + @@ -221,6 +225,9 @@ 202306081452095_UpdateProjModel.cs + + 202308241516227_AddProdStatusVarAndIndex.cs + diff --git a/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.Designer.cs b/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.Designer.cs new file mode 100644 index 00000000..e282993b --- /dev/null +++ b/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.Designer.cs @@ -0,0 +1,29 @@ +// +namespace EgtBEAMWALL.DataLayer.Migrations +{ + using System.CodeDom.Compiler; + using System.Data.Entity.Migrations; + using System.Data.Entity.Migrations.Infrastructure; + using System.Resources; + + [GeneratedCode("EntityFramework.Migrations", "6.4.4")] + public sealed partial class AddProdStatusVarAndIndex : IMigrationMetadata + { + private readonly ResourceManager Resources = new ResourceManager(typeof(AddProdStatusVarAndIndex)); + + string IMigrationMetadata.Id + { + get { return "202308241516227_AddProdStatusVarAndIndex"; } + } + + string IMigrationMetadata.Source + { + get { return null; } + } + + string IMigrationMetadata.Target + { + get { return Resources.GetString("Target"); } + } + } +} diff --git a/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.cs b/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.cs new file mode 100644 index 00000000..b5529252 --- /dev/null +++ b/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.cs @@ -0,0 +1,42 @@ +namespace EgtBEAMWALL.DataLayer.Migrations +{ + using System; + using System.Data.Entity.Migrations; + + public partial class AddProdStatusVarAndIndex : DbMigration + { + public override void Up() + { + AddColumn("dbo.ProdList", "IsActive", c => c.Boolean(nullable: false)); + AddColumn("dbo.ProdList", "IsProduced", c => c.Boolean(nullable: false)); + AddColumn("dbo.ProdList", "IsArchived", c => c.Boolean(nullable: false)); + CreateIndex("dbo.ProjList", "DtCreated"); + CreateIndex("dbo.ProjList", "DtExported"); + CreateIndex("dbo.ProjList", "IsActive"); + CreateIndex("dbo.ProjList", "IsNew"); + CreateIndex("dbo.ProjList", "Id"); + CreateIndex("dbo.ProdList", "DtCreated"); + CreateIndex("dbo.ProdList", "Id"); + CreateIndex("dbo.ProdList", "IsActive"); + CreateIndex("dbo.ProdList", "IsProduced"); + CreateIndex("dbo.ProdList", "IsArchived"); + } + + public override void Down() + { + DropIndex("dbo.ProdList", new[] { "IsArchived" }); + DropIndex("dbo.ProdList", new[] { "IsProduced" }); + DropIndex("dbo.ProdList", new[] { "IsActive" }); + DropIndex("dbo.ProdList", new[] { "Id" }); + DropIndex("dbo.ProdList", new[] { "DtCreated" }); + DropIndex("dbo.ProjList", new[] { "Id" }); + DropIndex("dbo.ProjList", new[] { "IsNew" }); + DropIndex("dbo.ProjList", new[] { "IsActive" }); + DropIndex("dbo.ProjList", new[] { "DtExported" }); + DropIndex("dbo.ProjList", new[] { "DtCreated" }); + DropColumn("dbo.ProdList", "IsArchived"); + DropColumn("dbo.ProdList", "IsProduced"); + DropColumn("dbo.ProdList", "IsActive"); + } + } +} diff --git a/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.resx b/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.resx new file mode 100644 index 00000000..646f71b8 --- /dev/null +++ b/EgtBEAMWALL.DataLayer/Migrations/202308241516227_AddProdStatusVarAndIndex.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + + + dbo + + \ No newline at end of file