using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; /*------------------------------------------------ * Aggiunto fix come da link seguente: * * https://stackoverflow.com/questions/14033193/entity-framework-provider-type-could-not-be-loaded * * I solved this by adding an using stament on top of my DBContext class, like so: * using SqlProviderServices= System.Data.Entity.SqlServer.SqlProviderServices; * */ namespace EgwProxy.Icoel.DataLayer.Controllers { /// /// Controller accesso dati DB vari x ICOEL /// public class DbController : IDisposable { #region Private Fields private static EntrataDbContext dbEntrataCtx; private static ExportDbContext dbExportCtx; private static TrackerDbContext dbTrackerCtx; private static SyncStateDbContext dbSyncStateCtx; private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields #region Public Constructors /// /// Avvio dell'oggetto gestione DB con le 3 stringhe di connessione specifiche /// /// Connesisone Db frontiera Entrata Merce /// Connessione DB Tracker /// Connessione DB IcoelExport /// Connessione DB locale di SYNC public DbController(string connEntrata, string connTracker, string connExport, string connSyncState) { dbEntrataCtx = new EntrataDbContext(connEntrata); Log.Info("Avviata classe EntrataDbContext"); dbExportCtx = new ExportDbContext(connExport); Log.Info("Avviata classe ExportDbContext"); dbTrackerCtx = new TrackerDbContext(connTracker); Log.Info("Avviata classe dbTrackerCtx"); dbSyncStateCtx = new SyncStateDbContext(connSyncState); Log.Info("Avviata classe dbSyncStateCtx"); } #endregion Public Constructors #region Public Methods /// /// Dispose classe /// public void Dispose() { // Clear database context dbEntrataCtx.Dispose(); dbExportCtx.Dispose(); dbTrackerCtx.Dispose(); dbSyncStateCtx.Dispose(); } /// /// Elenco record Entrata Merce (Frontiera) /// /// idx da cui partire a recuperare /// public List EntrateGetFromIdx(int minIdx = 0) { List dbResult = new List(); dbResult = dbEntrataCtx .DbSetEntrataMerce .Where(x => (x.ID_CHIAVE >= minIdx)) .OrderBy(x => x.ID_CHIAVE) .ToList(); return dbResult; } /// /// Elenco ultimi record Entrata Merce (Frontiera) /// /// numero records da recuperare /// public List EntrateGetLast(int numRec = 100) { List dbResult = new List(); dbResult = dbEntrataCtx .DbSetEntrataMerce .OrderByDescending(x => x.ID_CHIAVE) .Take(numRec) .ToList(); return dbResult; } /// /// Elenco record ProductsTotal (da Icoel Export Products) /// /// idx da cui partire a recuperare /// public List ExportProductsGetFromIdx(int minIdx = 0) { List dbResult = new List(); dbResult = dbExportCtx .DbSetProductsTotals .Where(x => (x.SizerBatchId >= minIdx)) .OrderBy(x => x.SizerBatchId) .ToList(); return dbResult; } /// /// Elenco ultimi record ProductsTotal (da Icoel Export Products) /// /// numero records da recuperare /// public List ExportProductsGetLast(int numRec = 0) { List dbResult = new List(); dbResult = dbExportCtx .DbSetProductsTotals .OrderByDescending(x => x.SizerBatchId) .ThenByDescending(x => x.Index) .Take(numRec) .ToList(); return dbResult; } /// /// Esegue una volta la stored di ImportAll (x recupero dati da DB esterni) e poi restitusice in output la tab di SyncState x verificare lo stato /// /// public List SyncStateDoImportAll() { List dbResult = new List(); dbResult = dbSyncStateCtx .Database .SqlQuery("EXEC stp_ImportAll") .ToList(); return dbResult; } /// /// Esegue una volta la stored di ImportAll (x recupero dati da DB esterni) e poi restitusice in output la tab di SyncState x verificare lo stato /// /// public List SyncStateDoExportAll() { List dbResult = new List(); dbResult = dbSyncStateCtx .Database .SqlQuery("EXEC stp_ExportAll") .ToList(); return dbResult; } /// /// recupera la tab di SyncState corrente /// /// public List SyncStateGetAll() { List dbResult = new List(); dbResult = dbSyncStateCtx .DbSetSyncState .ToList(); return dbResult; } /// /// Elenco record DettConfezioni (da Icoel TrackerLotti) /// /// idx da cui partire a recuperare /// public List TrackConfezioniGetFromIdx(int minIdx = 0) { List dbResult = new List(); dbResult = dbTrackerCtx .DbSetConfezioni .Where(x => (x.Pack_Id >= minIdx)) .OrderBy(x => x.Pack_Id) .ToList(); return dbResult; } /// /// Elenco ultimi record DettaglioConfezioni (da Icoel TrackerLotti) /// /// numero records da recuperare /// public List TrackConfezioniGetLast(int numRec = 0) { List dbResult = new List(); dbResult = dbTrackerCtx .DbSetConfezioni .OrderByDescending(x => x.Pack_Id) .Take(numRec) .ToList(); return dbResult; } /// /// Elenco dettaglio conferimento x PackId (da Icoel TrackerLotti) /// ATTENZIONE: in caso di mancata associazione lotto ingresso con lavorazione corrente la vista restituisce nuovo (possibile lavorare senza lotto ingresso e senza tracking) /// /// idx da cui partire a recuperare /// public List TrackPackConfDetailByIdx(long packId = 0) { List dbResult = new List(); dbResult = dbTrackerCtx .DbSetConferimento .Where(x => (x.PackId == packId)) .OrderBy(x => x.NUMERO_LOTTO) .ThenByDescending(x => x.QUANTITA_ENTRATA) .ToList(); return dbResult; } #endregion Public Methods } }