using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using MP.Data.DatabaseModels; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace MP.Data.Controllers { public class MpSpecController : IDisposable { #region Public Constructors public MpSpecController(IConfiguration configuration) { _configuration = configuration; Log.Info("Avviata classe MpSpecController"); } #endregion Public Constructors #region Public Methods /// /// Elenco Gruppi tipo Azienda /// /// public List AnagGruppiAziende() { return AnagGruppiGetTipo("AZIENDA"); } /// /// Elenco Gruppi tipo Fasi /// /// public List AnagGruppiFase() { return AnagGruppiGetTipo("FASE"); } /// /// Elenco Gruppi /// /// public List AnagGruppiGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetAnagGruppi .AsNoTracking() .OrderBy(x => x.CodGruppo) .ToList(); } return dbResult; } /// /// Gruppi x tipo /// /// /// public List AnagGruppiGetTipo(string tipoGruppo) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetAnagGruppi .Where(x => x.TipoGruppo == tipoGruppo) .AsNoTracking() .OrderBy(x => x.CodGruppo) .ToList(); } return dbResult; } /// /// Elenco valori ammessi x Stati commessa (es Yacht Baglietto) /// /// public List AnagStatiComm() { return ListValuesFilt("PODL", "StatoComm"); } /// /// Elenco valori ammessi x Tipo articoli /// /// public List AnagTipoArtLV() { return ListValuesFilt("AnagArticoli", "Tipo"); } /// /// Elenco codice articoli che abbiano dati Dossier /// /// public List ArticleWithDossier() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetDossiers .AsNoTracking() .Select(i => i.CodArticolo) .Distinct() .ToList(); } return dbResult; } /// /// Eliminazione Record /// /// /// public async Task ArticoliDeleteRecord(AnagArticoli currRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currVal = dbCtx .DbSetArticoli .Where(x => x.CodArticolo == currRec.CodArticolo) .FirstOrDefault(); dbCtx .DbSetArticoli .Remove(currVal); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante ArticoliDeleteRecord{Environment.NewLine}{exc}"); } } return fatto; } /// /// Elenco tabella Articoli da filtro /// /// /// /// public List ArticoliGetSearch(int numRecord, string searchVal = "") { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetArticoli .AsNoTracking() .Where(x => x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal) || string.IsNullOrEmpty(searchVal)) .OrderBy(x => x.CodArticolo) .Take(numRecord) .ToList(); } return dbResult; } /// /// Elenco tabella Articoli da filtro /// /// /// /// /// public List ArticoliGetSearch(int numRecord, string azienda = "*", string searchVal = "") { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetArticoli .AsNoTracking() .Where(x => (x.Azienda == azienda || azienda == "*") && (x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal) || string.IsNullOrEmpty(searchVal))) .OrderBy(x => x.CodArticolo) .Take(numRecord) .ToList(); } return dbResult; } /// /// Elenco tabella Articoli IMPIEGATI (da stored stp_ART_getUsed) /// /// public List ArticoliGetUsed() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetArticoli .FromSqlRaw("EXEC stp_ART_getUsed") .AsNoTracking() .ToList(); } return dbResult; } /// /// Update Record /// /// /// public async Task ArticoliUpdateRecord(AnagArticoli editRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetArticoli .Where(x => x.CodArticolo == editRec.CodArticolo) .FirstOrDefault(); if (currRec != null) { currRec.Disegno = editRec.Disegno; currRec.DescArticolo = editRec.DescArticolo; currRec.Tipo = editRec.Tipo; currRec.Azienda = editRec.Azienda; dbCtx.Entry(currRec).State = EntityState.Modified; } else { dbCtx .DbSetArticoli .Add(editRec); } await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante ArticoliUpdateRecord{Environment.NewLine}{exc}"); } } return fatto; } /// /// Elenco da tabella Config /// /// public List ConfigGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetConfig .AsNoTracking() .OrderBy(x => x.Chiave) .ToList(); } return dbResult; } /// /// Update record config /// /// public bool ConfigUpdate(ConfigModel updRec) { bool fatto = false; ConfigModel dbResult = new ConfigModel(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetConfig .Where(x => x.Chiave == updRec.Chiave) .FirstOrDefault(); if (dbResult != null) { dbResult.Valore = updRec.Valore; dbCtx.SaveChanges(); fatto = true; } } return fatto; } public void Dispose() { _configuration = null; } /// /// Eliminazione di un dossier /// /// record dossier da eliminare /// public async Task DossiersDeleteRecord(DossierModel currRec) { bool answ = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currVal = dbCtx .DbSetDossiers .Where(x => x.IdxDossier == currRec.IdxDossier) .FirstOrDefault(); dbCtx .DbSetDossiers .Remove(currVal); await dbCtx.SaveChangesAsync(); answ = true; } catch (Exception exc) { Log.Error($"Eccezione durante DossiersDeleteRecord{Environment.NewLine}{exc}"); } } return answ; } /// /// Elenco ultimi n record DOssiers (che contengono ad esempio "salvataggi" di FLuxLog) dato /// macchina (ordinato x data registrazione) /// /// * = tutte, altrimenti solo x una data macchina /// * = tutti, altrimenti solo x un dato articolo /// Data minima per estrazione records /// Data Massima per estrazione records /// public List DossiersGetLastFilt(string IdxMacchina, string CodArticolo, DateTime DtStart, DateTime DtEnd) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetDossiers .AsNoTracking() .Where(x => (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina) && (CodArticolo == "*" || x.CodArticolo == CodArticolo) && (x.DtRif >= DtStart && x.DtRif <= DtEnd)) .Include(m => m.MachineNav) //.Include(o => o.OdlNav) .Include(a => a.ArticoloNav) .OrderByDescending(x => x.DtRif) .ToList(); } return dbResult; } /// /// insert di un record Dossier /// /// record dossier da modificare /// public async Task DossiersInsert(DossierModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { dbCtx .DbSetDossiers .Add(newRec); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante DossiersInsert{Environment.NewLine}{exc}"); } } return fatto; } /// /// Effettua salvataggio snapshot parametri (con stored) + svuota eventuale cache redis /// /// macchina /// Num massimo secondi per recuperare dati correnti /// DataOra riferimento x cui prendere valori antecedenti public bool DossiersTakeParamsSnapshot(string idxMacchina, int maxSec, DateTime dtRif) { bool answ = false; using (var dbCtx = new MoonProContext(_configuration)) { var pIdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var pMaxSec = new SqlParameter("@MaxSec", maxSec); var pDtRif = new SqlParameter("@DtRif", dtRif); var dbResult = dbCtx .Database .ExecuteSqlRaw("EXEC stp_FL_TakeSnapshot @IdxMacchina,@MaxSec,@DtRif", pIdxMacchina, pMaxSec, pDtRif); answ = true; } return answ; } /// /// Effettua salvataggio snapshot parametri (con stored) + svuota eventuale cache redis /// /// macchina /// Data min x selezione /// Data MAX x selezione public bool DossiersTakeParamsSnapshotLast(string idxMacchina, DateTime dtMin, DateTime dtMax) { bool answ = false; using (var dbCtx = new MoonProContext(_configuration)) { var pIdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); var pDtMin = new SqlParameter("@DtMin", dtMin); var pDtMax = new SqlParameter("@DtMax", dtMax); var dbResult = dbCtx .Database .ExecuteSqlRaw("EXEC stp_FL_TakeSnapshotLast @IdxMacchina,@DtMin,@DtMax", pIdxMacchina, pDtMin, pDtMax); answ = true; } return answ; } /// /// Update del campo VALORE di un dossier (che contiene json flux log serializzati) /// /// record dossier da modificare /// public async Task DossiersUpdateValore(DossierModel editRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetDossiers .Where(x => x.IdxDossier == editRec.IdxDossier) .FirstOrDefault(); if (currRec != null) { currRec.Valore = editRec.Valore; dbCtx.Entry(currRec).State = EntityState.Modified; } else { dbCtx .DbSetDossiers .Add(editRec); } await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante DossiersUpdateRecord{Environment.NewLine}{exc}"); } } return fatto; } /// /// Elenco valori link (x home e navMenu laterale) /// /// public List ElencoLink() { return ListLinkFilt("SpecLink"); } /// /// Aggiunta record EventList /// /// /// public async Task EvListInsert(EventListModel newRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetEvList .Add(newRec); await dbCtx.SaveChangesAsync(); } catch (Exception exc) { Log.Error($"Eccezione durante EvListInsert{Environment.NewLine}{exc}"); } } await Task.Delay(1); return fatto; } /// /// Elenco ultimi n record flux log dato macchina e flusso (ordinato x data registrazione) /// /// Data massima x eventi /// Data minima x eventi /// * = tutte, altrimenti solo x una data macchina /// *=tutti, altrimenti solo selezionato /// numero massimo record da restituire /// public List FluxLogGetLastFilt(DateTime DtMax, DateTime DtMin, string IdxMacchina, string CodFlux, int MaxRec) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetFluxLog .AsNoTracking() .Where(x => (x.dtEvento >= DtMin && x.dtEvento <= DtMax) && (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina) && (CodFlux == "*" || x.CodFlux == CodFlux)) .OrderByDescending(x => x.dtEvento) .Take(MaxRec) .ToList(); } return dbResult; } public List ListLinkFilt(string tipoLink) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetLinkMenu .Where(x => x.TipoLink == tipoLink) .AsNoTracking() .OrderBy(x => x.ordine) .ToList(); } return dbResult; } /// /// Elenco ODL filtrati x stato, articolo, KeyRich (che contiene stato) /// /// Stato ODL: true=in corso/completato /// Cod articolo /// KeyRich (parziale) da cercare (es cod stato x yacht) /// Data inizio /// Data fine /// public List ListODLFilt(bool inCorso, string codArt, string keyRichPart, string IdxMacchina, DateTime startDate, DateTime endDate) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetODL .Where(x => ((inCorso && x.DataFine == null) || ((!inCorso && x.DataFine != null) && x.DataInizio >= startDate && x.DataInizio <= endDate)) && (x.KeyRichiesta.Contains(keyRichPart) || keyRichPart == "*") && (x.IdxMacchina.Contains(IdxMacchina) || IdxMacchina == "*") && (codArt == "*" || x.CodArticolo.Contains(codArt))) .AsNoTracking() .Include(m => m.MachineNav) .Include(a => a.ArticoloNav) .OrderByDescending(x => x.IdxOdl) .ToList(); } return dbResult; } /// /// Elenco PODL non avviati filtrati x articolo, KeyRich (che contiene stato) /// /// Cod articolo /// KeyRich (parziale) da cercare (es cod stato x yacht) /// public List ListPODLFilt(string codArt, string keyRichPart) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetPODL .Where(x => (x.IdxOdl == 0) && (x.KeyRichiesta.Contains(keyRichPart) || keyRichPart == "*") && (codArt == "*" || x.CodArticolo.Contains(codArt))) .AsNoTracking() .Include(m => m.MachineNav) .Include(a => a.ArticoloNav) .OrderByDescending(x => x.InsertDate) .ToList(); } return dbResult; } /// /// Elenco valori ammessi x tabella/colonna /// /// /// /// public List ListValuesFilt(string tabName, string fieldName) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetListValues .Where(x => x.TableName == tabName && x.FieldName == fieldName) .AsNoTracking() .OrderBy(x => x.ordinal) .ToList(); } return dbResult; } /// /// Elenco da tabella Macchine /// /// public List MacchineGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetMacchine .AsNoTracking() .OrderBy(x => x.IdxMacchina) .ToList(); } return dbResult; } /// /// Elenco id Macchine che abbiano dati FLuxLog, nel periodo indicato /// /// /// /// public async Task> MacchineWithFlux(DateTime dtStart, DateTime dtEnd) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = await dbCtx .DbSetFluxLog .AsNoTracking() .Where(x => x.dtEvento >= dtStart && x.dtEvento <= dtEnd) .Select(i => i.IdxMacchina) .Distinct() .ToListAsync(); } return dbResult; } /// /// Elenco da tabella MappaStatoExpl /// /// public List MseGetAll(int maxAge = 2000) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { var maxAgeSec = new SqlParameter("@maxAgeSec", maxAge); dbResult = dbCtx .DbSetMSE .FromSqlRaw("EXEC stp_MSE_getData @maxAgeSec", maxAgeSec) .AsNoTracking() .ToList(); } return dbResult; } /// /// Chiusura ODL con eventuale conferma pezzi /// /// idx odl da chiudere /// idx macchina /// matricola operatore /// indica se confermare i pezzi prima di chiudere ODL /// Conferma con rettifica (ev 121) x pezzi lasciati in macchina /// Modo conferma produzione (0=periodo, 1=giorno, 2=turno) /// public async Task ODLClose(int idxOdl, string idxMacchina, int matrOpr, bool confPezzi, bool confRett, int modoConfProd) { bool fatto = false; if (idxOdl > 0) { using (var dbCtx = new MoonProContext(_configuration)) { DateTime adesso = DateTime.Now; // preparo i parametri var IdxODL = new SqlParameter("@IdxODL", idxOdl); var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); // FARE FIXME TODO !!! da valutare casi setup/autoconferma... #if false // controllo se HO pezzi da confermare... var statoProd = StatoProdMacchina(idxMacchina); if (statoProd.pezziNonConfermati < 1) { } #endif // se richiesto confermo produzione if (confPezzi) { var MatrApp = new SqlParameter("@MatrApp", idxMacchina); /* ---------------------------------- * CONFERMA PEZZI * * condizioni da verificare: * - gestione rettifica (ev121) / pezzi da LASCIARE in macchina * - conferma a zero pezzi (setup) oppure con i pezzi fatti e non ancora confermati * * * * */ // recupero i dati dei pezzi da confermare... con DbSetPzProd + exec // stp_PzProd_getByMacchina 'SIMUL_01' // stp_ConfermaProduzCompletaFull /* * @idxMacchina NVARCHAR(50), @MatrApp INT, @dataFrom DATETIME, @dataTo DATETIME, @pezziConf INT, @pezziLasciati INT, -- pezzi lasciati = evento 121 (-) pre conferma e (+) dopo --> da lasciare in macchina post conferma @pezziScar INT = 0, -- pezzi scartati (registrati da 2016.11.20) DA INDICARE COME VALORE > 0!!! sennò faccio ABS... @TipoConf INT = 0, -- Tipo intervallo conferma: 0 = periodo intero, 1 = per giorni, 2 = per turni @DataOraApp DATETIME = NULL, -- di norma GETDATE() nel programma - serve per ricalcolo @TestConferma BIT = 1 -- TestConferma : 1 = verifica conf. duplicata e inserisci in ElencoConfermeProd, 0 = nessuna verifica e inserimento ( per ricalcolo ) */ } // ora chiudo ODL try { var dbResult = await dbCtx .DbSetStatOdl .FromSqlRaw("EXEC stp_ODL_fineProd @IdxODL, @IdxMacchina", IdxODL, IdxMacchina) .AsNoTracking() .ToListAsync(); } catch (Exception exc) { Log.Error($"Eccezione durante ODLClose{Environment.NewLine}{exc}"); } } } return fatto; } /// /// Recupero odl data chiave /// /// /// /// public ODLModel OdlGetByKey(int idxOdl) { ODLModel dbResult = new ODLModel(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetODL .FirstOrDefault(x => x.IdxOdl == idxOdl); } return dbResult; } /// /// Recupero Odl CORRENTI /// /// public List OdlGetCurrent() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetODL .Where(x => x.DataInizio != null && x.DataFine == null) .ToList(); } return dbResult; } /// /// Statistiche ODL calcolate (da stored stp_STAT_ODL) /// /// public async Task> OdlStart(int IdxOdl) { List dbResult = new List(); if (IdxOdl > 0) { using (var dbCtx = new MoonProContext(_configuration)) { var IdxODL = new SqlParameter("@IdxODL", IdxOdl); dbResult = await dbCtx .DbSetStatOdl .FromSqlRaw("EXEC stp_STAT_ODL @IdxODL", IdxODL) .AsNoTracking() .ToListAsync(); } } return dbResult; } /// /// Elenco parametri validi x una data macchina /// /// /// public List ParametriGetFilt(string IdxMacchina) { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetFluxLog .AsNoTracking() .Where(x => (IdxMacchina == "*" || x.IdxMacchina == IdxMacchina)) .Take(1000) .Select(i => i.CodFlux) .Distinct() .OrderBy(x => x) .ToList(); } return dbResult; } /// /// Recupero PODL da chiave /// /// /// public async Task PODL_getByKey(int idxPODL) { PODLModel dbResult = new PODLModel(); using (var dbCtx = new MoonProContext(_configuration)) { try { dbResult = dbCtx .DbSetPODL .AsNoTracking() .Where(x => x.IdxPromessa == idxPODL) .FirstOrDefault(); } catch (Exception exc) { Log.Error($"Eccezione durante PODL_getByKey{Environment.NewLine}{exc}"); } } await Task.Delay(1); return dbResult; } /// /// Recupero PODL da IdxOdl /// /// /// public PODLModel PODL_getByOdl(int idxODL) { PODLModel dbResult = new PODLModel(); using (var dbCtx = new MoonProContext(_configuration)) { try { dbResult = dbCtx .DbSetPODL .AsNoTracking() .Where(x => x.IdxOdl == idxODL) .FirstOrDefault(); } catch (Exception exc) { Log.Error($"Eccezione durante PODL_getByOdl{Environment.NewLine}{exc}"); } } return dbResult; } /// /// Avvio setup ODL da PODL /// /// /// /// /// /// /// public async Task PODL_startSetup(PODLModel editRec, int matrOpr, double tcRich, int pzPallet, string note) { bool answ = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetPODL .AsNoTracking() .Where(x => x.IdxPromessa == editRec.IdxPromessa) .FirstOrDefault(); if (currRec != null) { // eseguo stored attrezzaggio var IdxPromessa = new SqlParameter("@idxPromessa", editRec.IdxPromessa); var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); var IdxMacchina = new SqlParameter("@IdxMacchina", editRec.IdxMacchina); var TCRichAttr = new SqlParameter("@TCRichAttr", tcRich); var PzPallet = new SqlParameter("@PzPallet", pzPallet); var Note = new SqlParameter("@Note", note); var callResult = await dbCtx .Database .ExecuteSqlRawAsync("EXEC stp_ODL_inizioSetupPromessa @idxPromessa, @MatrOpr, @IdxMacchina, @TCRichAttr, @PzPallet, @Note", IdxPromessa, MatrOpr, IdxMacchina, TCRichAttr, PzPallet, Note); answ = true; } } catch (Exception exc) { Log.Error($"Eccezione durante PODL_doSetup{Environment.NewLine}{exc}"); } } await Task.Delay(1); return answ; } /// /// Eliminazione Record /// /// /// public async Task PODLDeleteRecord(PODLModel currRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currVal = dbCtx .DbSetPODL .Where(x => x.IdxPromessa == currRec.IdxPromessa) .FirstOrDefault(); dbCtx .DbSetPODL .Remove(currVal); await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante PODLDeleteRecord{Environment.NewLine}{exc}"); } } return fatto; } /// /// Update Record /// /// /// public async Task PODLUpdateRecord(PODLModel editRec) { bool fatto = false; using (var dbCtx = new MoonProContext(_configuration)) { try { var currRec = dbCtx .DbSetPODL .Where(x => x.IdxPromessa == editRec.IdxPromessa) .FirstOrDefault(); if (currRec != null) { currRec.CodGruppo = editRec.CodGruppo; currRec.CodArticolo = editRec.CodArticolo; currRec.IdxMacchina = editRec.IdxMacchina; currRec.KeyBCode = editRec.KeyBCode; currRec.KeyRichiesta = editRec.KeyRichiesta; currRec.NumPezzi = editRec.NumPezzi; currRec.Tcassegnato = editRec.Tcassegnato; currRec.Attivabile = editRec.Attivabile; currRec.Note = editRec.Note; dbCtx.Entry(currRec).State = EntityState.Modified; } else { dbCtx .DbSetPODL .Add(editRec); } await dbCtx.SaveChangesAsync(); fatto = true; } catch (Exception exc) { Log.Error($"Eccezione durante PODLUpdateRecord{Environment.NewLine}{exc}"); } } return fatto; } /// /// Annulla modifiche su una specifica entity (cancel update) /// /// /// public bool RollBackEntity(object item) { bool answ = false; using (var dbCtx = new MoonProContext(_configuration)) { try { if (dbCtx.Entry(item).State == Microsoft.EntityFrameworkCore.EntityState.Deleted || dbCtx.Entry(item).State == Microsoft.EntityFrameworkCore.EntityState.Modified) { dbCtx.Entry(item).Reload(); } } catch (Exception exc) { Log.Error($"Eccezione in rollBackEntity{Environment.NewLine}{exc}"); } } return answ; } /// /// Stato prod macchina /// /// /// public StatoProdModel StatoProdMacchina(string idxMacchina) { StatoProdModel dbResult = new StatoProdModel(); using (var dbCtx = new MoonProContext(_configuration)) { var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); dbResult = dbCtx .DbSetStatoProd .FromSqlRaw("EXEC stp_PzProd_getByMacchina @IdxMacchina", IdxMacchina) .AsNoTracking() .FirstOrDefault(); } return dbResult; } /// /// Elenco Vocabolario (completo) /// /// public List VocabolarioGetAll() { List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { dbResult = dbCtx .DbSetVocabolario .AsNoTracking() .OrderBy(x => x.Lemma) .ToList(); } return dbResult; } #endregion Public Methods #region Private Fields private static IConfiguration _configuration; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }