static void Main(string[] args) { IParser parser = new Converter.Converter(); IValidator validator = new Validator(); string directory = AppDomain.CurrentDomain.BaseDirectory; OptionsManager <DataAccessOptions> options = new OptionsManager <DataAccessOptions>(directory, parser, validator); LoggingOptions loggingOptions = new LoggingOptions(); //loggingOptions.ConnectingOptions = options.GetOptions<ConnectingOptions>() as ConnectingOptions; loggingOptions.EnableLogging = true; ILogger logger = new Logger.Logger(loggingOptions, parser); ServiceLayer.ServiceLayer SL = new ServiceLayer.ServiceLayer( options.GetOptions <ConnectingOptions>() as ConnectingOptions, parser, logger); SendingOptions sendingOptions = options.GetOptions <SendingOptions>() as SendingOptions; logger.Log("Starting pulling data"); if (sendingOptions.PullingMode == SendingOptions.PullingModes.FullTable) { int curIndex = 1; int maxID = SL.DAL.EmployeeMaxID(); List <HumanResourcesInfo> info; while (curIndex < maxID) { info = SL.GetPersonsRange(curIndex, sendingOptions.BatchSize); int lastID = info.Last().Employee.BusinessEntityID; string s = parser.SerializeXML(info); using (StreamWriter sw = new StreamWriter($@"{sendingOptions.Target}\file{curIndex}-{lastID}.txt")) { sw.Write(s); } curIndex = lastID + 1; } } else if (sendingOptions.PullingMode == SendingOptions.PullingModes.ByBatches) { List <HumanResourcesInfo> info = SL.GetEmployees(); SplitOnBatches(info, sendingOptions, parser); } else if (sendingOptions.PullingMode == SendingOptions.PullingModes.FullJoin) { List <HumanResourcesInfo> info = SL.GetHumanResourcesByJoin(); SplitOnBatches(info, sendingOptions, parser); } logger.Log("Pulled all data successfully"); }