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
}
}