public static IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
        {
            DataSetDataStore result = new DataSetDataStore(fdataSet, autoCreateOption);

            objectsToDisposeOnDisconnect = new IDisposable[] { };
            return(result);
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            string           connectionString;
            AutoCreateOption autoCreateOption = AutoCreateOption.SchemaAlreadyExists;

            if (HostingEnvironment.IsDevelopment())
            {
                connectionString = Configuration.GetConnectionString("Dev");
                autoCreateOption = AutoCreateOption.DatabaseAndSchema;
            }
            else
            {
                connectionString = Configuration.GetConnectionString("Prod");
                connectionString = XpoDefault.GetConnectionPoolString(connectionString);
            }
            IDataStore dataStore = XpoDefault.GetConnectionProvider(connectionString, autoCreateOption);

            services.AddSingleton(new WebApiDataStoreService(dataStore));

            // add XML Serializer formatters
            services.AddMvc()
            .AddXmlSerializerFormatters();
        }
예제 #3
0
        public static void Connect(string connectionString, AutoCreateOption autoCreateOption)
        {
            ConnectionString = connectionString;

            XpoDefault.DataLayer = XpoDefault.GetDataLayer(ConnectionString, autoCreateOption);
            XpoDefault.Session   = null;
        }
예제 #4
0
파일: Startup.cs 프로젝트: rajshining/XPO
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();


            // Configure XPO Data Store Service
            string           connectionString;
            AutoCreateOption autoCreateOption = AutoCreateOption.SchemaAlreadyExists;

            if (HostingEnvironment.IsDevelopment())
            {
                connectionString = Configuration.GetConnectionString("Dev");
                autoCreateOption = AutoCreateOption.DatabaseAndSchema;
            }
            else
            {
                connectionString = Configuration.GetConnectionString("Prod");
                connectionString = XpoDefault.GetConnectionPoolString(connectionString);
            }
            IDataStore             dataStore = XpoDefault.GetConnectionProvider(connectionString, autoCreateOption);
            WebApiDataStoreService service   = new WebApiDataStoreService(dataStore);

            services.AddSingleton(dataStore);
            services.AddSingleton(service);

            services.AddMvc().AddXmlSerializerFormatters();
            services.AddCors(options =>
                             options.AddPolicy("XPO", builder =>
                                               builder.WithOrigins("https://localhost:44317")
                                               .WithMethods("POST")
                                               .WithHeaders("Content-Type")));
        }
        public static IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
        {
            var rv = new SafePostgreSqlConnectionProvider(connectionString, autoCreateOption);

            objectsToDisposeOnDisconnect = new IDisposable[] { rv };
            return(rv);
        }
        public RestApiDataStore(string Url, AutoCreateOption AutoCreateOption, string Token = "")

        {
            this.Url              = Url;
            this.Token            = Token;
            this.AutoCreateOption = AutoCreateOption;
        }
        public static IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
        {
            objectsToDisposeOnDisconnect = null;
            ConnectionStringParser Parser = new ConnectionStringParser(connectionString);
            var Url           = Parser.GetPartByName(UrlPart);
            var Controller    = Parser.GetPartByName(ControllerPart);
            var Token         = Parser.GetPartByName(TokenPart);
            var DataStoreId   = Parser.GetPartByName(DataStoreIdPart);
            var Serialization = Parser.GetPartByName(SerializationPart);
            Dictionary <string, string> Headers = new Dictionary <string, string>();

            Headers.Add("Authorization", "Bearer " + Token);
            Headers.Add(DataStoreIdPart, DataStoreId);
            Uri    uri = new Uri(new Uri(Url), Controller);
            string url = uri.ToString();
            ISerializationAdapter Adapter = null;

            if (Serialization == "NewtonsoftSerializationAdapter")
            {
                Adapter = new NewtonsoftSerializationAdapter();
            }
            if (Serialization == "ProtobufSerializationAdapter")
            {
                Adapter = new ProtobufSerializationAdapter();
            }
            //TODO remove this line when we got an answer from https://github.com/MelbourneDeveloper/RestClient.Net/issues/75
            Adapter = new NewtonsoftSerializationAdapter();

            ApiFunction restClientNetFunctionClient = new ApiFunction(url, Adapter, Headers);

            return(new XpoWebApiProvider(restClientNetFunctionClient, new CompressXmlObjectSerializationService(), autoCreateOption));
            //return new AsyncDataStoreWrapper(new XpoWebApiProvider(restClientNetFunctionClient, new SimpleObjectSerializationService(), autoCreateOption));
        }
 XpoDataStoreService(string connectionString, AutoCreateOption autoCreateOption, bool useDataStorePool)
 {
     if (useDataStorePool)
     {
         connectionString = XpoDefault.GetConnectionPoolString(connectionString);
     }
     DataStore = XpoDefault.GetConnectionProvider(connectionString, autoCreateOption);
 }
 public XPOConnector(string login, string password)
 {
     this.login    = login;
     this.password = password;
     PoplOracleConnectionProvider.Register(); //0.8
     _AutoCreateOption = AutoCreateOption.SchemaAlreadyExists;
     Connect(_AutoCreateOption);              //autocreateOption je nastavovava az v GetDataLayer...
 }
 public SafePostgreSqlConnectionProvider(string connectionString, AutoCreateOption autoCreateOption)
 {
     ConnectionStrinStatic = connectionString;
     //XpoDefault.ConnectionString = connectionString;
     _connectionString = connectionString;
     _autoCreateOption = autoCreateOption;
     DoReconnect();
 }
        public static XpoDataStoreService Create(IServiceProvider serviceProvider)
        {
            IConfiguration   config           = (IConfiguration)serviceProvider.GetService(typeof(IConfiguration));
            string           connectionString = config["XpoDataStore:ConnectionString"];
            AutoCreateOption autoCreateOption = (AutoCreateOption)Enum.Parse(typeof(AutoCreateOption), config["XpoDataStore:AutoCreateOption"]);
            bool             useDataStorePool = bool.Parse(config["XpoDataStore:UseDataStorePool"]);

            return(new XpoDataStoreService(connectionString, autoCreateOption, useDataStorePool));
        }
예제 #12
0
        private DevExpress.Xpo.DB.IDataStore CreateNewDataStore(IConfiguration configuration, string Id)
        {
            var ConnectionStrings = configuration.GetSection("ConnectionStrings").AsEnumerable();
            List <KeyValuePair <string, string> > AutoCreateOptionsFromConfig = configuration.GetSection("DatabaseAutoCreateOptions").AsEnumerable().ToList();

            AutoCreateOptions = new Dictionary <string, string>();
            foreach (KeyValuePair <string, string> Value in AutoCreateOptionsFromConfig)
            {
                if (Value.Value == null)
                {
                    continue;
                }

                string[] Split = Value.Key?.Split(':');
                if (Split.Length > 1)
                {
                    AutoCreateOptions.Add(Split[1], Value.Value);
                }
            }

            if (!AutoCreateOptions.ContainsKey(Id))
            {
                throw new ArgumentException($"Missing AutoCreateOptions:{Id}");
            }


            AutoCreateOption autoCreateOptionEnum = AutoCreateOption.None;

            switch (AutoCreateOptions[Id])
            {
            case "DatabaseAndSchema":
                autoCreateOptionEnum = AutoCreateOption.DatabaseAndSchema;
                break;

            case "SchemaOnly":
                autoCreateOptionEnum = AutoCreateOption.SchemaOnly;
                break;

            case "None ":
                autoCreateOptionEnum = AutoCreateOption.None;
                break;

            case "SchemaAlreadyExists":
                autoCreateOptionEnum = AutoCreateOption.SchemaAlreadyExists;
                break;
            }

            var ConnectionString = configuration.GetConnectionString(Id);

            IDisposable[] DisposableObjects = null;
            //TODO read autocreate options from the config
            DevExpress.Xpo.DB.IDataStore DataStore = XpoDefault.GetConnectionProvider(ConnectionString, autoCreateOptionEnum, out DisposableObjects);
            return(DataStore);
        }
예제 #13
0
        static IDataLayer CreateDataLayer(bool threadSafe)
        {
            string connStr = ConfigurationManager.ConnectionStrings["XpoTutorial"].ConnectionString;
            //connStr = XpoDefault.GetConnectionPoolString(connStr);  // Uncomment this line if you use a database server like SQL Server, Oracle, PostgreSql etc.
            ReflectionDictionary dictionary = new ReflectionDictionary();

            dictionary.GetDataStoreSchema(PersistentTypes);                         // Pass all of your persistent object types to this method.
            AutoCreateOption autoCreateOption = AutoCreateOption.DatabaseAndSchema; // Use AutoCreateOption.DatabaseAndSchema if the database or tables does not exists. Use AutoCreateOption.SchemaAlreadyExists if the database already exists.
            IDataStore       provider         = XpoDefault.GetConnectionProvider(connStr, autoCreateOption);

            return(threadSafe  ? (IDataLayer) new ThreadSafeDataLayer(dictionary, provider) : new SimpleDataLayer(dictionary, provider));
        }
예제 #14
0
        //public static T Execute<T>(string dataLayerName, Func<Session, T> work, bool transactional = true, bool commit = true)
        //{

        //}

        #endregion

        private static IDataLayer createDataLayer(string connectionString, string datalayerName)
        {
            if (String.IsNullOrEmpty(connectionString))
            {
                throw new ArgumentNullException("connectionString");
            }
            // set XpoDefault.Session to null to prevent accidental use of XPO default session
            XpoDefault.Session = null;
            //ReflectionClassInfo.SuppressSuspiciousMemberInheritanceCheck = true;
            // Needed to run in Medium Trust Security Context
            XpoDefault.UseFastAccessors    = false;
            XpoDefault.IdentityMapBehavior = IdentityMapBehavior.Strong;

            // autocreate option in connectionstring
            AutoCreateOption createOption      = Conversion.GetConfigOption <AutoCreateOption>(connectionString, "AutoCreateOption", AutoCreateOption.DatabaseAndSchema);
            bool             enableCachingNode = Conversion.GetConfigOption(connectionString, "EnableCachingNode", false);

            XPDictionary dataDictionary = new ReflectionDictionary();
            IDataStore   dataStore      = XpoDefault.GetConnectionProvider(connectionString, createOption);

            // Initialize the XPO dictionary
            dataDictionary.GetDataStoreSchema(GetDataTypes(datalayerName));

            // make sure everything exists in the db
            if (createOption == AutoCreateOption.DatabaseAndSchema)
            {
                using (SimpleDataLayer dataLayer = new SimpleDataLayer(dataStore))
                {
                    using (Session session = new Session(dataLayer))
                    {
                        // place code here to patch metadata
                        session.UpdateSchema();
                        session.CreateObjectTypeRecords();
                        XpoDefault.DataLayer = new ThreadSafeDataLayer(session.Dictionary, dataStore);
                    }
                }
            }
            IDataLayer result;

            if (enableCachingNode)
            {
                result = new ThreadSafeDataLayer(dataDictionary, new DataCacheNode(new DataCacheRoot(dataStore)));
            }
            else
            {
                result = new ThreadSafeDataLayer(dataDictionary, dataStore);
            }

            return(result);
        }
예제 #15
0
            public static UnitOfWork Connect()
            {
                AutoCreateOption opt = UpdateDatabase
                                               ? AutoCreateOption.DatabaseAndSchema
                                               : AutoCreateOption.SchemaAlreadyExists;

                XpoDefault.DataLayer = XpoDefault.GetDataLayer(ConnectionString, opt);
                XpoDefault.Session   = null;
                if (XpoDefault.DataLayer == null)
                {
                    return(null);
                }
                return(new UnitOfWork());
            }
예제 #16
0
        static IDataStore CreateWebApiDataStoreFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
        {
            ConnectionStringParser parser = new ConnectionStringParser(connectionString);

            if (!parser.PartExists("uri"))
            {
                throw new ArgumentException("The connection string does not contain the 'uri' part.");
            }
            string     uri    = parser.GetPartByName("uri");
            HttpClient client = new HttpClient(GetInsecureHandler());

            client.BaseAddress           = new Uri(uri);
            objectsToDisposeOnDisconnect = new IDisposable[] { client };
            return(new WebApiDataStoreClient(client, autoCreateOption));
        }
예제 #17
0
 public static IServiceCollection AddXpo(
     this IServiceCollection services,
     IConfiguration configuration,
     AutoCreateOption autoCreateOption = AutoCreateOption.None
     )
 => services.AddXpoDefaultDataLayer(ServiceLifetime.Singleton, dl => dl
                                    .UseConnectionString(configuration.GetConnectionString("DefaultConnection"))
                                    .UseThreadSafeDataLayer(autoCreateOption == AutoCreateOption.None)
                                    .UseConnectionPool(autoCreateOption == AutoCreateOption.None)
                                    .UseAutoCreationOption(autoCreateOption)
                                    .UseEntityTypes(
                                        new Type[0]
                                        .UseLicensingPersistentModels()
                                        .ToArray()
                                        )
                                    );
 public static IServiceCollection AddXpo(
     this IServiceCollection services,
     IConfiguration configuration,
     AutoCreateOption autoCreateOption = AutoCreateOption.None
     )
 => services.AddXpoDefaultDataLayer(ServiceLifetime.Singleton, dl => dl
                                    .UseConnectionString(configuration.GetConnectionString("DefaultConnection"))
                                    .UseThreadSafeDataLayer(autoCreateOption == AutoCreateOption.None)
                                    .UseConnectionPool(autoCreateOption == AutoCreateOption.None)
                                    .UseAutoCreationOption(autoCreateOption)
                                    .UseEntityTypes(
                                        IdentityXpoTypes.PersistentTypes
                                        .Concat(IdentityModelTypeList.ModelTypes)
                                        .Concat(XenialIdentityModelTypeList.ModelTypes)
                                        .ToArray()
                                        )
                                    );
        public static IDataLayer CreateDataLayer(AutoCreateOption autoCreationOption, bool threadSafe)
        {
            var dictionary = new ReflectionDictionary();

            dictionary.NullableBehavior = NullableBehavior.ByUnderlyingType;
            dictionary.GetDataStoreSchema(persistentTypes);
            if (threadSafe)
            {
                var provider = XpoDefault.GetConnectionProvider(XpoDefault.GetConnectionPoolString(ConnectionString), autoCreationOption);
                return(new ThreadSafeDataLayer(dictionary, provider));
            }
            else
            {
                var provider = XpoDefault.GetConnectionProvider(ConnectionString, autoCreationOption);
                return(new SimpleDataLayer(dictionary, provider));
            }
        }
예제 #20
0
        public static IDataLayer CreateDataLayer(AutoCreateOption autoCreationOption, bool threadSafe)
        {
            XpoTypesInfoHelper.GetXpoTypeInfoSource();
            XafTypesInfo.Instance.RegisterEntity(typeof(Employee));
            XafTypesInfo.Instance.RegisterEntity(typeof(PermissionPolicyUser));
            XafTypesInfo.Instance.RegisterEntity(typeof(PermissionPolicyRole));

            foreach (var item in persistentTypes)
            {
                XafTypesInfo.Instance.RegisterEntity(item);
            }

            if (threadSafe)
            {
                var provider = XpoDefault.GetConnectionProvider(XpoDefault.GetConnectionPoolString(ConnectionString), autoCreationOption);
                return(new ThreadSafeDataLayer(XpoTypesInfoHelper.GetXpoTypeInfoSource().XPDictionary, provider));
            }
            else
            {
                var provider = XpoDefault.GetConnectionProvider(ConnectionString, autoCreationOption);
                return(new SimpleDataLayer(XpoTypesInfoHelper.GetXpoTypeInfoSource().XPDictionary, provider));
            }
        }
 /// <summary>
 /// Конструктор поставщика данных с указанием соединения и опции автосоздания структуры данных
 /// </summary>
 /// <param name="connection">Соединение с базой данных</param>
 /// <param name="autoCreateOption">Опция автосоздания структуры данных</param>
 public OracleConnectionProviderEx(IDbConnection connection, AutoCreateOption autoCreateOption)
     : base(connection, autoCreateOption)
 {
     OnOpenConnection();
 }
 /// <summary>
 /// Конструктор базы данных с указанием соединения, опции автосоздания структуры данных и потока для записи скрипта
 /// </summary>
 /// <param name="connection">Соединение с базой данных</param>
 /// <param name="autoCreateOption">Опция автосоздания структуры данных</param>
 /// <param name="scriptWriter">Поток для записи изменений структуры в скрипт</param>
 /// <param name="updateOptions">Опции обновления структуры данных</param>
 /// <param name="insensitive">Регистронезависимость условий</param>
 /// <param name="indexTablespace">Табличное пространство для индексов</param>
 public OracleConnectionProviderEx(IDbConnection connection, AutoCreateOption autoCreateOption, StreamWriter scriptWriter, 
     UpdateSchemaOptions updateOptions = UpdateSchemaOptions.Default, bool? insensitive = null, string indexTablespace = null)
     : base(connection, autoCreateOption)
 {
     this.scriptMode = scriptWriter != null;
     this.scriptWriter = scriptWriter;
     this.updateOptions = updateOptions;
     this.insensitive = insensitive;
     this.indexTablespace = indexTablespace;
     OnOpenConnection();
 }
 public new static IDataStore CreateProviderFromConnection(IDbConnection connection, AutoCreateOption autoCreateOption)
 {
     return(new MSSqlConnectionProviderWithCte(connection, autoCreateOption));
 }
예제 #24
0
 public SafePostgreSqlConnectionProvider(string connectionString, AutoCreateOption autoCreateOption)
 {
     this.ConnectionString = connectionString;
     this.AutoCreateOption = autoCreateOption;
     DoReconnect();
 }
예제 #25
0
 public MSSqlConnectionProvider(string connection, AutoCreateOption autoCreateOption)
     : this(new SqlConnection(connection), autoCreateOption) {
 }
        public new static IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
        {
            IDbConnection connection = new SqlConnection(connectionString);

            objectsToDisposeOnDisconnect = new IDisposable[] { connection };
            return(CreateProviderFromConnection(connection, autoCreateOption));
        }
        /// <summary>
        /// Создает поставщика данных на основе строки соединения
        /// </summary>
        /// <param name="connectionString">Строка соединения с поставщиком данных</param>
        /// <param name="autoCreateOption">Опция автосоздания структуры базы данных</param>
        /// <param name="objectsToDisposeOnDisconnect">Объекты, требующие удаления после отключения соединения</param>
        /// <returns>Экземпляр поставщика данных OracleConnectionProviderEx</returns>
        public static new IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
        {
            // Файл для записи скрипта
            string scriptPath = null;
            UpdateSchemaOptions updateOptions = UpdateSchemaOptions.Default;
            bool? insensitive = null;
            string indexTablespace = null;
            ConnectionStringParser parser = new ConnectionStringParser(connectionString);
            if (parser.PartExists(ScriptParameterName))
            {
                scriptPath = parser.GetPartByName(ScriptParameterName);
                parser.RemovePartByName(ScriptParameterName);
                connectionString = parser.GetConnectionString();
            }

            // Опции обновления
            if (parser.PartExists(UpdateOptionsParameterName))
            {
                updateOptions = (UpdateSchemaOptions)Convert.ToInt32(parser.GetPartByName(UpdateOptionsParameterName));
                parser.RemovePartByName(UpdateOptionsParameterName);
                connectionString = parser.GetConnectionString();
            }

            // Регистронезависимость в условиях
            if (parser.PartExists(InsesnsitiveParameterName))
            {
                insensitive = Convert.ToBoolean(parser.GetPartByName(InsesnsitiveParameterName));
                parser.RemovePartByName(InsesnsitiveParameterName);
                connectionString = parser.GetConnectionString();
            }

            // Табличное пространство для индексов
            if (parser.PartExists(IndexTablespaceParameterName))
            {
                indexTablespace = parser.GetPartByName(IndexTablespaceParameterName);
                parser.RemovePartByName(IndexTablespaceParameterName);
                connectionString = parser.GetConnectionString();
            }

            // Соединение
            IDbConnection connection = CreateConnection(connectionString);
            objectsToDisposeOnDisconnect = new IDisposable[] { connection };
            return scriptPath == null && updateOptions == UpdateSchemaOptions.Default && !insensitive.HasValue && indexTablespace == null ?
                CreateProviderFromConnection(connection, autoCreateOption) :
                new OracleConnectionProviderEx(connection, autoCreateOption, scriptPath, updateOptions, insensitive, indexTablespace);
        }
예제 #28
0
 public MSSqlConnectionProvider(IDbConnection connection, AutoCreateOption autoCreateOption)
     : base(connection, autoCreateOption)
 {
 }
 /// <summary>
 /// Конструктор базы данных с указанием соединения, опции автосоздания структуры данных и пути файла для записи скрипта
 /// </summary>
 /// <param name="connection">Соединение с базой данных</param>
 /// <param name="autoCreateOption">Опция автосоздания структуры данных</param>
 /// <param name="scriptPath">Путь файла для записи изменений структуры в скрипт</param>
 /// <param name="updateOptions">Опции обновления структуры данных</param>
 /// <param name="insensitive">Регистронезависимость условий</param>
 /// <param name="indexTablespace">Табличное пространство для индексов</param>
 public OracleConnectionProviderEx(IDbConnection connection, AutoCreateOption autoCreateOption, string scriptPath,
     UpdateSchemaOptions updateOptions = UpdateSchemaOptions.Default, bool? insensitive = null, string indexTablespace = null)
     : base(connection, autoCreateOption)
 {
     this.scriptMode = !string.IsNullOrEmpty(scriptPath);
     this.scriptPath = scriptPath;
     this.updateOptions = updateOptions;
     this.insensitive = insensitive;
     this.indexTablespace = indexTablespace;
     OnOpenConnection();
 }
 public static IDataStore CreateCustomProviderFromConnection(IDbConnection connection, AutoCreateOption autoCreateOption)
 {
     return(new CustomMsSqlConnectionProvider(connection, autoCreateOption));
 }
 public override IDataStore CreateProviderFromConnection(IDbConnection connection, AutoCreateOption autoCreateOption)
 {
     return(CustomMsSqlConnectionProvider.CreateCustomProviderFromConnection(connection, autoCreateOption));
 }
예제 #32
0
 public MultiDataStoreProxy(string connectionString,XPDictionary dictionary,AutoCreateOption  option=AutoCreateOption.None):this(XpoDefault.GetConnectionProvider(connectionString, option),connectionString,dictionary ){
     
 }
예제 #33
0
 public MSSqlConnectionProvider(IDbConnection connection, AutoCreateOption autoCreateOption)
     : base(connection, autoCreateOption) {
 }
 /// <summary>
 /// Создает поставщика данных на основе соединения с базой данных
 /// </summary>
 /// <param name="connection">Соединение с базой данных</param>
 /// <param name="autoCreateOption">Опция автосоздания структуры базы данных</param>
 /// <returns>Экземпляр поставщика данных OracleConnectionProviderEx</returns>
 public static new IDataStore CreateProviderFromConnection(IDbConnection connection, AutoCreateOption autoCreateOption)
 {
     return new OracleConnectionProviderEx(connection, autoCreateOption);
 }
예제 #35
0
 public MultiDataStoreProxy(string connectionString,AutoCreateOption autoCreateOption=AutoCreateOption.None):this(XpoDefault.GetConnectionProvider(connectionString, autoCreateOption),connectionString ){
     
 }
예제 #36
0
 public MSSqlConnectionProvider(string connection, AutoCreateOption autoCreateOption)
     : this(new SqlConnection(connection), autoCreateOption)
 {
 }
 public override IDataStore CreateProviderFromConnection(IDbConnection connection, AutoCreateOption autoCreateOption)
 {
     return(MSSqlConnectionProviderWithCte.CreateProviderFromConnection(connection, autoCreateOption));
 }
예제 #38
0
        //LogicPos BootStrap
        private static void Init()
        {
            try
            {
                //After Construct Settings (ex Required path["certificates"])
                //Utils.Log(string.Format("BootStrap {0}....", SettingsApp.AppName));

                // Init Paths
                GlobalFramework.Path = new Hashtable();
                GlobalFramework.Path.Add("temp", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathTemp"]));
                GlobalFramework.Path.Add("certificates", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathCertificates"]));
                GlobalFramework.Path.Add("plugins", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathPlugins"]));
                //Create Directories
                FrameworkUtils.CreateDirectory(FrameworkUtils.OSSlash(Convert.ToString(GlobalFramework.Path["temp"])));
                FrameworkUtils.CreateDirectory(FrameworkUtils.OSSlash(Convert.ToString(GlobalFramework.Path["certificates"])));

                // Protection for plugins Path
                if (GlobalFramework.Path["plugins"] == null || !Directory.Exists(GlobalFramework.Path["plugins"].ToString()))
                {
                    Utils.Log($"Missing pathPlugins: {GlobalFramework.Settings["pathPlugins"]}. Please correct path in config! ex \"c:\\Program Files (x86)\\Logicpulse\"");
                    //Output only if in Console Mode
                    if (Environment.UserInteractive)
                    {
                        Utils.Log("Press any key...");
                        Console.ReadKey();
                    }
                    Environment.Exit(0);
                }

                // VendorPlugin
                InitPlugins();

                //Prepare AutoCreateOption
                AutoCreateOption xpoAutoCreateOption = AutoCreateOption.None;

                //Get DataBase Details
                GlobalFramework.DatabaseType = (DatabaseType)Enum.Parse(typeof(DatabaseType), GlobalFramework.Settings["databaseType"]);
                GlobalFramework.DatabaseName = SettingsApp.DatabaseName;
                //Override default Database name with parameter from config
                string configDatabaseName = GlobalFramework.Settings["databaseName"];
                GlobalFramework.DatabaseName = (string.IsNullOrEmpty(configDatabaseName)) ? SettingsApp.DatabaseName : configDatabaseName;
                //Xpo Connection String
                string xpoConnectionString = string.Format(GlobalFramework.Settings["xpoConnectionString"], GlobalFramework.DatabaseName.ToLower());

                //Init XPO Connector DataLayer
                try
                {
                    _log.Debug(string.Format("Init XpoDefault.DataLayer: [{0}]", xpoConnectionString));
                    XpoDefault.DataLayer       = XpoDefault.GetDataLayer(xpoConnectionString, xpoAutoCreateOption);
                    GlobalFramework.SessionXpo = new Session(XpoDefault.DataLayer)
                    {
                        LockingOption = LockingOption.None
                    };
                }
                catch (Exception ex)
                {
                    _log.Error(ex.Message, ex);
                    //Output only if in Console Mode
                    if (Environment.UserInteractive)
                    {
                        Utils.Log(ex.Message);
                        Utils.Log("Press any key...");
                        Console.ReadKey();
                    }
                    Environment.Exit(0);
                }

                //PreferenceParameters
                GlobalFramework.PreferenceParameters = FrameworkUtils.GetPreferencesParameters();

                //CultureInfo/Localization
                string culture = GlobalFramework.PreferenceParameters["CULTURE"];
                if (!string.IsNullOrEmpty(culture))
                {
                    /* IN006018 and IN007009 */
                    //Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
                }
                GlobalFramework.CurrentCulture = CultureInfo.CurrentUICulture;
                //Always use en-US NumberFormat because of MySql Requirements
                GlobalFramework.CurrentCultureNumberFormat = CultureInfo.GetCultureInfo(SettingsApp.CultureNumberFormat);

                //SettingsApp
                string companyCountryOid = GlobalFramework.PreferenceParameters["COMPANY_COUNTRY_OID"];
                string systemCurrencyOid = GlobalFramework.PreferenceParameters["SYSTEM_CURRENCY_OID"];
                SettingsApp.ConfigurationSystemCountry  = (cfg_configurationcountry)FrameworkUtils.GetXPGuidObject(GlobalFramework.SessionXpo, typeof(cfg_configurationcountry), new Guid(companyCountryOid));
                SettingsApp.ConfigurationSystemCurrency = (cfg_configurationcurrency)FrameworkUtils.GetXPGuidObject(GlobalFramework.SessionXpo, typeof(cfg_configurationcurrency), new Guid(systemCurrencyOid));

                //After Construct Settings (ex Required path["certificates"])
                Utils.Log(string.Format("BootStrap {0}....", SettingsApp.AppName));

                //Show WS Mode
                Utils.Log(string.Format("ServiceATEnableTestMode: [{0}]", SettingsApp.ServiceATEnableTestMode));

                // Protection to Check if all Required values are met
                if (!HasAllRequiredValues())
                {
                    throw new Exception($"Error! Invalid Parameters Met! Required parameters missing! Check parameters: AccountFiscalNumber: [{SettingsApp.ServicesATAccountFiscalNumber}], ATAccountPassword: [{SettingsApp.ServicesATAccountPassword}], TaxRegistrationNumber: [{SettingsApp.ServicesATTaxRegistrationNumber}]");
                }
            }
            catch (Exception ex)
            {
                _log.Error(ex.Message, ex);
            }
        }
 public override IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
 {
     return(MSSqlConnectionProviderWithCte.CreateProviderFromString(connectionString, autoCreateOption, out objectsToDisposeOnDisconnect));
 }