//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: private void Init() { try { //Used to Force create DatabaseScema and Fixtures with XPO (Non Script Mode): Requirements for Work: Empty or Non Exist Database //Notes: OnError "An exception of type 'DevExpress.Xpo.DB.Exceptions.SchemaCorrectionNeededException'", UnCheck [X] Break when this exception is user-unhandled and continue, watch log and wait until sucefull message appear bool xpoCreateDatabaseAndSchema = SettingsApp.XPOCreateDatabaseAndSchema; bool xpoCreateDatabaseObjectsWithFixtures = xpoCreateDatabaseAndSchema; //Prepare AutoCreateOption AutoCreateOption xpoAutoCreateOption = (xpoCreateDatabaseAndSchema) ? AutoCreateOption.DatabaseAndSchema : AutoCreateOption.None; //Init Settings Main Config Settings //GlobalFramework.Settings = ConfigurationManager.AppSettings; //Override Licence data with Encrypted File Data if (File.Exists(SettingsApp.LicenceFileName)) { Utils.AssignLicence(SettingsApp.LicenceFileName, true); } //Other Global App Settings GlobalApp.MultiUserEnvironment = Convert.ToBoolean(GlobalFramework.Settings["appMultiUserEnvironment"]); GlobalApp.UseVirtualKeyBoard = Convert.ToBoolean(GlobalFramework.Settings["useVirtualKeyBoard"]); //Init App Notifications GlobalApp.Notifications = new System.Collections.Generic.Dictionary <string, bool>(); GlobalApp.Notifications["SHOW_PRINTER_UNDEFINED"] = true; //System GlobalApp.FilePickerStartPath = System.IO.Directory.GetCurrentDirectory(); //Get DataBase Details GlobalFramework.DatabaseType = (DatabaseType)Enum.Parse(typeof(DatabaseType), GlobalFramework.Settings["databaseType"]); //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()); Utils.AssignConnectionStringToSettings(xpoConnectionString); //Removed Protected Files //ProtectedFiles, Before Create Database from Scripts, usefull if Scripts are modified by User if (SettingsApp.ProtectedFilesUse) { GlobalApp.ProtectedFiles = InitProtectedFiles(); } //Check if Database Exists if Not Create it from Scripts bool databaseCreated = false; if (!xpoCreateDatabaseAndSchema) { //Get result to check if DB is created (true) try { // Launch Scripts SettingsApp.firstBoot = true; databaseCreated = DataLayer.CreateDatabaseSchema(xpoConnectionString, GlobalFramework.DatabaseType, GlobalFramework.DatabaseName); } catch (Exception ex) { //Extra protection to prevent goes to login without a valid connection _log.Error("void Init() :: DataLayer.CreateDatabaseSchema :: " + ex.Message, ex); /* IN009034 */ GlobalApp.DialogThreadNotify.WakeupMain(); Utils.ShowMessageTouch(GlobalApp.WindowStartup, DialogFlags.Modal, new Size(900, 700), MessageType.Error, ButtonsType.Ok, resources.CustomResources.GetCustomResources(GlobalFramework.Settings["customCultureResourceDefinition"], "global_error"), ex.Message); Environment.Exit(0); } } SettingsApp.firstBoot = false; //Init XPO Connector DataLayer try { /* IN007011 */ var connectionStringBuilder = new System.Data.Common.DbConnectionStringBuilder() { ConnectionString = xpoConnectionString }; if (connectionStringBuilder.ContainsKey("password")) { connectionStringBuilder["password"] = "******"; } ; _log.Debug(string.Format("void Init() :: Init XpoDefault.DataLayer: [{0}]", connectionStringBuilder.ToString())); XpoDefault.DataLayer = XpoDefault.GetDataLayer(xpoConnectionString, xpoAutoCreateOption); GlobalFramework.SessionXpo = new Session(XpoDefault.DataLayer) { LockingOption = LockingOption.None }; } catch (Exception ex) { _log.Error("void Init() :: Init XpoDefault.DataLayer: " + ex.Message, ex); /* IN009034 */ GlobalApp.DialogThreadNotify.WakeupMain(); Utils.ShowMessageTouch(GlobalApp.WindowStartup, DialogFlags.Modal, new Size(900, 700), MessageType.Error, ButtonsType.Ok, resources.CustomResources.GetCustomResources(GlobalFramework.Settings["customCultureResourceDefinition"], "global_error"), ex.Message); throw; // TO DO } //Check Valid Database Scheme if (!xpoCreateDatabaseAndSchema && !FrameworkUtils.IsRunningOnMono()) { bool isSchemaValid = DataLayer.IsSchemaValid(xpoConnectionString); _log.Debug(string.Format("void Init() :: Check if Database Scheme: isSchemaValid : [{0}]", isSchemaValid)); if (!isSchemaValid) { /* IN009034 */ GlobalApp.DialogThreadNotify.WakeupMain(); string endMessage = "Invalid database Schema! Fix database Schema and Try Again!"; Utils.ShowMessageTouch(GlobalApp.WindowStartup, DialogFlags.Modal, new Size(500, 300), MessageType.Error, ButtonsType.Ok, resources.CustomResources.GetCustomResources(GlobalFramework.Settings["customCultureResourceDefinition"], "global_error"), string.Format(endMessage, Environment.NewLine)); Environment.Exit(0); } } // Assign PluginSoftwareVendor Reference to DataLayer SettingsApp to use In Date Protection, we Required to assign it Statically to Prevent Circular References // Required to be here, before it is used in above lines, ex Utils.GetTerminal() if (GlobalFramework.PluginSoftwareVendor != null) { logicpos.datalayer.App.SettingsApp.PluginSoftwareVendor = GlobalFramework.PluginSoftwareVendor; } //If not in Xpo create database Scheme Mode, Get Terminal from Db if (!xpoCreateDatabaseAndSchema) { GlobalFramework.LoggedTerminal = Utils.GetTerminal(); } //After Assigned LoggedUser if (xpoCreateDatabaseObjectsWithFixtures) { InitFixtures.InitUserAndTerminal(GlobalFramework.SessionXpo); InitFixtures.InitOther(GlobalFramework.SessionXpo); InitFixtures.InitDocumentFinance(GlobalFramework.SessionXpo); InitFixtures.InitWorkSession(GlobalFramework.SessionXpo); } //End Xpo Create Scheme and Fixtures, Terminate App and Request assign False to Developer Vars if (xpoCreateDatabaseAndSchema) { /* IN009034 */ GlobalApp.DialogThreadNotify.WakeupMain(); string endMessage = "Xpo Create Schema and Fixtures Done!{0}Please assign false to 'xpoCreateDatabaseAndSchema' and 'xpoCreateDatabaseObjectsWithFixtures' and run App again"; _log.Debug(string.Format("void Init() :: xpoCreateDatabaseAndSchema: {0}", endMessage)); Utils.ShowMessageTouch(GlobalApp.WindowStartup, DialogFlags.Modal, new Size(500, 300), MessageType.Info, ButtonsType.Ok, resources.CustomResources.GetCustomResources(GlobalFramework.Settings["customCultureResourceDefinition"], "global_information"), string.Format(endMessage, Environment.NewLine)); Environment.Exit(0); } //Init PreferenceParameters GlobalFramework.PreferenceParameters = FrameworkUtils.GetPreferencesParameters(); //Init Preferences Path MainApp.InitPathsPrefs(); //CultureInfo/Localization string culture = GlobalFramework.PreferenceParameters["CULTURE"]; /* IN008013 */ if (String.IsNullOrEmpty(culture)) { culture = GlobalFramework.Settings["customCultureResourceDefinition"]; } //if (!string.IsNullOrEmpty(culture)) //{ /* IN006018 and IN007009 */ //logicpos.shared.App.CustomRegion.RegisterCustomRegion(); //Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture); //} //if (!Utils.IsLinux) //{ // Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture); //} GlobalFramework.CurrentCulture = CultureInfo.CurrentUICulture; /* IN006018 and IN007009 */ _log.Debug(string.Format("CUSTOM CULTURE :: CurrentUICulture '{0}' in use.", CultureInfo.CurrentUICulture)); //Always use en-US NumberFormat because of mySql Requirements GlobalFramework.CurrentCultureNumberFormat = CultureInfo.GetCultureInfo(SettingsApp.CultureNumberFormat); //Init AppSession string appSessionFile = Utils.GetSessionFileName(); if (databaseCreated && File.Exists(appSessionFile)) { File.Delete(appSessionFile); } GlobalFramework.SessionApp = GlobalFrameworkSession.InitSession(appSessionFile); //Try to Get open Session Day/Terminal for this Terminal GlobalFramework.WorkSessionPeriodDay = ProcessWorkSessionPeriod.GetSessionPeriod(WorkSessionPeriodType.Day); GlobalFramework.WorkSessionPeriodTerminal = ProcessWorkSessionPeriod.GetSessionPeriod(WorkSessionPeriodType.Terminal); //Use Detected ScreenSize string appScreenSize = string.IsNullOrEmpty(GlobalFramework.Settings["appScreenSize"]) ? GlobalFramework.PreferenceParameters["APP_SCREEN_SIZE"] : GlobalFramework.Settings["appScreenSize"]; if (appScreenSize.Replace(" ", string.Empty).Equals("0,0") || string.IsNullOrEmpty(appScreenSize)) { // Force Unknown Screen Size //GlobalApp.ScreenSize = new Size(2000, 1800); GlobalApp.ScreenSize = Utils.GetThemeScreenSize(); } //Use config ScreenSize else { Size configAppScreenSize = Utils.StringToSize(appScreenSize); GlobalApp.ScreenSize = Utils.GetThemeScreenSize(configAppScreenSize); } // Init ExpressionEvaluator GlobalApp.ExpressionEvaluator.EvaluateFunction += ExpressionEvaluatorExtended.ExpressionEvaluator_EvaluateFunction; // Init Variables ExpressionEvaluatorExtended.InitVariablesStartupWindow(); ExpressionEvaluatorExtended.InitVariablesPosMainWindow(); // Define Max Dialog Window Size GlobalApp.MaxWindowSize = new Size(GlobalApp.ScreenSize.Width - 40, GlobalApp.ScreenSize.Height - 40); // Add Variables to ExpressionEvaluator.Variables Singleton GlobalApp.ExpressionEvaluator.Variables.Add("globalScreenSize", GlobalApp.ScreenSize); //to used in shared projects GlobalFramework.screenSize = GlobalApp.ScreenSize; //Parse and store Theme in Singleton try { GlobalApp.Theme = XmlToObjectParser.ParseFromFile(SettingsApp.FileTheme); // Use with dynamic Theme properties like: // GlobalApp.Theme.Theme.Frontoffice.Window[0].Globals.Name = PosBaseWindow // GlobalApp.Theme.Theme.Frontoffice.Window[1].Objects.TablePadUser.Position = 50,50 // or use predicate with from object id ex //var predicate = (Predicate<dynamic>)((dynamic x) => x.ID == "StartupWindow"); //var themeWindow = GlobalApp.Theme.Theme.Frontoffice.Window.Find(predicate); //_log.Debug(string.Format("Message: [{0}]", themeWindow.Globals.Title)); } catch (Exception ex) { /* IN009034 */ GlobalApp.DialogThreadNotify.WakeupMain(); _log.Debug("void Init() :: XmlToObjectParser.ParseFromFile(SettingsApp.FileTheme) :: " + ex); Utils.ShowMessageTouchErrorRenderTheme(GlobalApp.WindowStartup, ex.Message); } //Init FastReports Custom Functions and Custom Vars CustomFunctions.Register(SettingsApp.AppName); //Hardware : Init Display if (GlobalFramework.LoggedTerminal.PoleDisplay != null) { GlobalApp.UsbDisplay = (UsbDisplayDevice)UsbDisplayDevice.InitDisplay(); GlobalApp.UsbDisplay.WriteCentered(string.Format("{0} {1}", SettingsApp.AppName, FrameworkUtils.ProductVersion), 1); GlobalApp.UsbDisplay.WriteCentered(SettingsApp.AppUrl, 2); GlobalApp.UsbDisplay.EnableStandBy(); } //Hardware : Init BarCodeReader if (GlobalFramework.LoggedTerminal.BarcodeReader != null) { GlobalApp.BarCodeReader = new InputReader(); } //Hardware : Init WeighingBalance if (GlobalFramework.LoggedTerminal.WeighingMachine != null) { GlobalApp.WeighingBalance = new WeighingBalance(GlobalFramework.LoggedTerminal.WeighingMachine); //_log.Debug(string.Format("IsPortOpen: [{0}]", GlobalApp.WeighingBalance.IsPortOpen())); } //Send To Log _log.Debug(string.Format("void Init() :: ProductVersion: [{0}], ImageRuntimeVersion: [{1}], IsLicensed: [{2}]", FrameworkUtils.ProductVersion, FrameworkUtils.ProductAssembly.ImageRuntimeVersion, LicenceManagement.IsLicensed)); //Audit FrameworkUtils.Audit("APP_START", string.Format("{0} {1} clr {2}", SettingsApp.AppName, FrameworkUtils.ProductVersion, FrameworkUtils.ProductAssembly.ImageRuntimeVersion)); if (databaseCreated) { FrameworkUtils.Audit("DATABASE_CREATE"); } // Plugin Errors Messages if (GlobalFramework.PluginSoftwareVendor == null || !GlobalFramework.PluginSoftwareVendor.IsValidSecretKey(SettingsApp.SecretKey)) { /* IN009034 */ GlobalApp.DialogThreadNotify.WakeupMain(); _log.Debug(String.Format("void Init() :: Wrong key detected [{0}]. Use a valid LogicposFinantialLibrary with same key as SoftwareVendorPlugin", SettingsApp.SecretKey)); Utils.ShowMessageTouch(GlobalApp.WindowStartup, DialogFlags.Modal, new Size(650, 380), MessageType.Error, ButtonsType.Ok, resources.CustomResources.GetCustomResources(GlobalFramework.Settings["customCultureResourceDefinition"], "global_error"), resources.CustomResources.GetCustomResources(GlobalFramework.Settings["customCultureResourceDefinition"], "dialog_message_error_plugin_softwarevendor_not_registered")); } // TK013134: HardCoded Modules : PakingTicket try { // Override default AppUseParkingTicketModule /* IN009239 */ //GlobalFramework.AppUseParkingTicketModule = Convert.ToBoolean(GlobalFramework.Settings["appMultiUserEnvironment"]); CustomAppOperationMode customAppOperationMode = FrameworkUtils.GetCustomAppOperationMode(); GlobalFramework.AppUseParkingTicketModule = CustomAppOperationMode.PARKING.Equals(customAppOperationMode); //TK016235 BackOffice - Mode GlobalFramework.AppUseBackOfficeMode = CustomAppOperationMode.BACKOFFICE.Equals(customAppOperationMode); // Init Global Object GlobalApp.ParkingTicket if (GlobalFramework.AppUseParkingTicketModule) { GlobalApp.ParkingTicket = new ParkingTicket(); } } catch (Exception) { _log.Error(string.Format("void Init() :: Missing AppUseParkingTicketModule Token in Settings, using default value: [{0}]", GlobalFramework.AppUseParkingTicketModule)); } //Create SystemNotification FrameworkUtils.SystemNotification(); //Clean Documents Folder on New Database, else we have Document files that dont correspond to Database if (databaseCreated && Directory.Exists(GlobalFramework.Path["documents"].ToString())) { string documentsFolder = GlobalFramework.Path["documents"].ToString(); System.IO.DirectoryInfo di = new DirectoryInfo(documentsFolder); if (di.GetFiles().Length > 0) { _log.Debug(string.Format("void Init() :: New database created. Start Delete [{0}] document(s) from [{1}] folder!", di.GetFiles().Length, documentsFolder)); foreach (FileInfo file in di.GetFiles()) { try { file.Delete(); } catch (Exception) { _log.Error(string.Format("void Init() :: Error! Cant delete Document file: [{0}]", file.Name)); } } } } } catch (Exception ex) { _log.Error("void Init() :: " + ex.Message, ex); } }
public static DevExpress.Xpo.DB.IDataStore GetConnectionProvider(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { return(XpoDefault.GetConnectionProvider(ConnectionString, autoCreateOption)); }
public static IDataLayer GetDataLayer(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { return(XpoDefault.GetDataLayer(ConnectionString, autoCreateOption)); }
/// <summary> /// Create initial database Scheme and Initial scripts /// </summary> /// <param name="ConnectionString"></param> /// <param name="DatabaseType"></param> /// <param name="DatabaseName"></param> /// <returns></returns> public static bool CreateDatabaseSchema(string pXpoConnectionString, DatabaseType pDatabaseType, string pDatabaseName) { //Log4Net log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); bool result = false; string xpoConnectionString = pXpoConnectionString; DatabaseType databaseType = pDatabaseType; string databaseTypeString = Enum.GetName(typeof(DatabaseType), GlobalFramework.DatabaseType); string databaseName = pDatabaseName; IDataLayer xpoDataLayer = null; bool onErrorsDropDatabase = true; string sql = string.Empty; object resultCmd; Hashtable commands = new Hashtable(); string commandSeparator = ";"; bool databaseExists = false; Session xpoSession; Dictionary <string, string> replace = GetReplaceables(pDatabaseType); string sqlDatabaseSchema = FrameworkUtils.OSSlash(string.Format(SettingsApp.FileDatabaseSchema, databaseTypeString)); //string sqlDatabaseOtherDatabaseType = FrameworkUtils.OSSlash(string.Format(SettingsApp.FileDatabaseOtherDatabaseType, databaseTypeString)); /* IN009045: Not in use */ string sqlDatabaseOtherCommon = FrameworkUtils.OSSlash(SettingsApp.FileDatabaseOtherCommon); /* IN008024 and after IN009035: data being included by databasedata.sql accordingly to its specific theme/language */ // string sqlDatabaseOtherCommonAppMode = string.Format("{0}/{1}", FrameworkUtils.OSSlash(SettingsApp.FileDatabaseOtherCommonAppMode), SettingsApp.CustomAppOperationMode.AppOperationTheme.ToLower()); string sqlDatabaseOtherCommonPluginsSoftwareVendor = FrameworkUtils.OSSlash(SettingsApp.FileDatabaseOtherCommonPluginsSoftwareVendor); string FileDatabaseOtherCommonPluginsSoftwareVendorOtherCommonCountry = FrameworkUtils.OSSlash(SettingsApp.FileDatabaseOtherCommonPluginsSoftwareVendor); string sqlDatabaseData = FrameworkUtils.OSSlash(SettingsApp.FileDatabaseData); string sqlDatabaseDataDemo = FrameworkUtils.OSSlash(SettingsApp.FileDatabaseDataDemo); string sqlDatabaseViews = FrameworkUtils.OSSlash(SettingsApp.FileDatabaseViews); bool useDatabaseDataDemo = Convert.ToBoolean(GlobalFramework.Settings["useDatabaseDataDemo"]); switch (databaseType) { case DatabaseType.SQLite: case DatabaseType.MonoLite: //connectionstring = string.Format(GlobalFramework.Settings["xpoConnectionString"], databaseName); break; case DatabaseType.MSSqlServer: //Required to Remove DataBase Name From Connection String xpoConnectionString = xpoConnectionString.Replace(string.Format("Initial Catalog={0};", pDatabaseName), string.Empty); commands.Add("select_schema", string.Format(@"SELECT name FROM sys.databases WHERE name = '{0}' AND name NOT IN ('master', 'tempdb', 'model', 'msdb');", databaseName)); commands.Add("create_database", string.Format(@"IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = '{0}') CREATE DATABASE {0};", databaseName)); commands.Add("use_database", string.Format(@"USE {0};", databaseName)); commands.Add("drop_database", string.Format(@"USE master; IF EXISTS(SELECT name FROM sys.databases WHERE name = '{0}') DROP DATABASE {0};", databaseName)); //ByPass Default commandSeparator ; commandSeparator = "GO"; break; case DatabaseType.MySql: //Required to Remove DataBase Name From Connection String xpoConnectionString = xpoConnectionString.Replace(string.Format("database={0};", pDatabaseName), string.Empty); commands.Add("select_schema", string.Format(@"SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '{0}';", databaseName)); commands.Add("create_database", string.Format(@"CREATE DATABASE IF NOT EXISTS {0} CHARACTER SET utf8 COLLATE utf8_bin /*!40100 DEFAULT CHARACTER SET utf8*/;", databaseName)); commands.Add("use_database", string.Format(@"USE {0};", databaseName)); commands.Add("drop_database", string.Format(@"DROP DATABASE IF EXISTS {0};", databaseName)); break; } //Get DataLayer try { xpoDataLayer = XpoDefault.GetDataLayer(xpoConnectionString, AutoCreateOption.None); } catch (Exception ex) { log.Error(string.Format("CreateDatabaseSchema(): {0}", ex.Message), ex); throw; } //Init Session xpoSession = new Session(xpoDataLayer); //Start CreateDatabaseSchema Process try { switch (databaseType) { case DatabaseType.SQLite: case DatabaseType.MonoLite: string filename = string.Format("{0}.db", databaseName); databaseExists = (File.Exists(filename) && new FileInfo(filename).Length > 0); log.Debug(string.Format("DatabaseExists: [{0}], databaseName: [{1}]", databaseExists, string.Format("{0}.db", databaseName))); break; case DatabaseType.MSSqlServer: case DatabaseType.MySql: default: sql = commands["select_schema"].ToString(); //log.Debug(string.Format("ExecuteScalar: [{0}]", sql)); resultCmd = xpoSession.ExecuteScalar(sql); log.Debug(string.Format("Use Database resultCmd: [{0}]", resultCmd)); databaseExists = ((string)resultCmd == databaseName); log.Debug(string.Format("DatabaseExists:[{0}] [{1}]", databaseName, databaseExists)); break; } //Create Database and Data if (!databaseExists) { log.Debug(string.Format("Creating {0} Database: [{1}]", databaseType, databaseName)); //Always Delete Old appsession.json file when Create new Database if (File.Exists(Utils.GetSessionFileName())) { File.Delete(Utils.GetSessionFileName()); } if (pDatabaseType != DatabaseType.SQLite && pDatabaseType != DatabaseType.MonoLite) { sql = commands["create_database"].ToString(); log.Debug(string.Format("ExecuteScalar: [{0}]", sql)); resultCmd = xpoSession.ExecuteScalar(sql); log.Debug(string.Format("Create Database resultCmd: [{0}]", resultCmd)); sql = commands["use_database"].ToString(); log.Debug(string.Format("ExecuteScalar: [{0}]", sql)); resultCmd = xpoSession.ExecuteScalar(sql); log.Debug(string.Format("Use Database resultCmd: [{0}]", resultCmd)); } //Restore Script Files //Schema result = ProcessDump(xpoSession, sqlDatabaseSchema, commandSeparator, replace); //Data if (result) { result = ProcessDump(xpoSession, sqlDatabaseData, ";", replace); } //DataDemo if (useDatabaseDataDemo && result) { result = ProcessDump(xpoSession, sqlDatabaseDataDemo, ";", replace); } //Process Other Files: DatabaseOtherCommonPluginsSoftwareVendor if (result) { result = ProcessDumpDirectory(xpoSession, sqlDatabaseOtherCommonPluginsSoftwareVendor, ";", replace); } //Views if (result) { result = ProcessDump(xpoSession, sqlDatabaseViews, ";", replace); } //Directory Scripts //Process Other Files: DatabaseOtherDatabaseType /* IN009045: not in use */ /*if (result) * { * result = ProcessDumpDirectory(xpoSession, sqlDatabaseOtherDatabaseType, ";", replace);//commandSeparator * }*/ //Process Other Files: DatabaseOtherCommon if (result) { result = ProcessDumpDirectory(xpoSession, sqlDatabaseOtherCommon, ";", replace); /* IN009045 */ } ////Process Other Files: DatabaseOtherCommonPluginsSoftwareVendor //if (result) //{ // result = ProcessDumpDirectory(xpoSession, sqlDatabaseOtherCommonPluginsSoftwareVendor, commandSeparator, replace); //} //Process Other Files: DatabaseOtherCommonAppMode /* IN009045 and IN009035: data being included by databasedata.sql accordingly to its specific theme/language */ /*if (result) * { * result = ProcessDumpDirectory(xpoSession, sqlDatabaseOtherCommonAppMode, ";", replace); * }*/ //Clean ConfigurationPreferenceParameter string sqlConfigurationPreferenceParameter = @"UPDATE cfg_configurationpreferenceparameter SET Value = NULL WHERE (Token = 'COMPANY_COUNTRY' OR Token = 'COMPANY_COUNTRY_CODE2' OR Token = 'SYSTEM_CURRENCY' OR Token = 'COMPANY_COUNTRY_OID' OR Token = 'SYSTEM_CURRENCY_OID')"; if (result && Debugger.IsAttached == true) { xpoSession.ExecuteScalar(sqlConfigurationPreferenceParameter); } else { sqlConfigurationPreferenceParameter = string.Format("{0} {1}", sqlConfigurationPreferenceParameter, "OR (FormPageNo = 1 AND FormType = 1 AND Token <> 'COMPANY_TAX_ENTITY')"); xpoSession.ExecuteScalar(sqlConfigurationPreferenceParameter); } } else { log.Debug(string.Format("{0} Database: [{1}] Already Exist! Skip Creating Database", databaseType, databaseName)); result = false; return(false); } } catch (Exception ex) { log.Error(ex.Message, ex); result = false; } //If detect errors Drop Incompleted Database if (onErrorsDropDatabase && !result) { //Drop Database sql = commands["drop_database"].ToString(); log.Debug(string.Format("ExecuteScalar: [{0}]", sql)); resultCmd = xpoSession.ExecuteScalar(sql); log.Debug(string.Format("Create Database resultCmd: [{0}]", resultCmd)); } return(result); }
public static IDataLayer GetDataLayer(IConfiguration configuration, DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { return(XpoDefault.GetDataLayer(configuration.GetConnectionString(ConnectionStringName), autoCreateOption)); }
public IDataStore CreateSchemaCheckingStore(out IDisposable[] disposableObjects) { disposableObjects = null; return(XpoDefault.GetConnectionProvider(_connectionString, AutoCreateOption.None)); }
public static void Connect(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { XpoDefault.DataLayer = XpoDefault.GetDataLayer(ConnectionString, autoCreateOption); XpoDefault.Session = null; }
public override IDataStore CreateUpdatingStore(out IDisposable[] disposableObjects) { disposableObjects = new IDisposable[] {}; return(new MultiDataStoreProxy(XpoDefault.GetConnectionProvider(ConnectionString, AutoCreateOption.DatabaseAndSchema), ConnectionString)); }
private void Anasayfa_Load(object sender, EventArgs e) { XpoDefault.DataLayer = XpoDefault.GetDataLayer(DevExpress.Xpo.DB.MySqlConnectionProvider.GetConnectionString("localhost", "root", "", "HastaneKayit"), DevExpress.Xpo.DB.AutoCreateOption.DatabaseAndSchema); }
static void Main(string[] args) { _log.Debug(String.Format("logicpos.reports open")); //DEVELOPER ONLY : Used !!!ONLY!!! to Force create DatabaseScema and Fixtures with XPO (Non Script Mode): Requirements for Work: Empty or Non Exist Database bool xpoCreateDatabaseAndSchema = false; bool xpoCreateDatabaseObjectsWithFixtures = xpoCreateDatabaseAndSchema; AutoCreateOption xpoAutoCreateOption = (xpoCreateDatabaseAndSchema) ? AutoCreateOption.DatabaseAndSchema : AutoCreateOption.None; GlobalFramework.Settings = ConfigurationManager.AppSettings; // Init Paths GlobalFramework.Path = new Hashtable(); GlobalFramework.Path.Add("assets", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathAssets"])); GlobalFramework.Path.Add("images", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathImages"])); GlobalFramework.Path.Add("themes", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathThemes"])); GlobalFramework.Path.Add("sounds", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathSounds"])); GlobalFramework.Path.Add("resources", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathResources"])); GlobalFramework.Path.Add("keyboards", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathKeyboards"])); GlobalFramework.Path.Add("reports", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathReports"])); GlobalFramework.Path.Add("temp", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathTemp"])); GlobalFramework.Path.Add("cache", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathCache"])); GlobalFramework.Path.Add("backups", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathBackups"])); //CultureInfo/Localization string culture = GlobalFramework.Settings["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(GlobalFramework.Settings["cultureNumberFormat"]); //Assign DatabaseType to GlobalApp Singleton GlobalFramework.DatabaseType = (DatabaseType)Enum.Parse(typeof(DatabaseType), GlobalFramework.Settings["databaseType"]); //Database Credentials string databaseName = GlobalFramework.Settings["databaseName"].ToLower(); //Xpo Connection String string xpoConnectionString = String.Format(GlobalFramework.Settings["xpoConnectionString"], databaseName); //Init XPO Connector DataLayer try { _log.Debug(String.Format("Init(): Init XpoDefault.DataLayer: [{0}]", xpoConnectionString)); XpoDefault.DataLayer = XpoDefault.GetDataLayer(xpoConnectionString, xpoAutoCreateOption); GlobalFramework.SessionXpo = new Session(XpoDefault.DataLayer) { LockingOption = LockingOption.None }; //GlobalFramework.SessionXpoBO = new Session(XpoDefault.DataLayer) { LockingOption = LockingOption.None }; } catch (Exception ex) { _log.Error(String.Format("Init(): {0}", ex.Message), ex); throw; } //PreferenceParameters GlobalFramework.PreferenceParameters = FrameworkUtils.GetPreferencesParameters(); //Init FastReports Custom Functions and Custom Vars WITH Report Resources CustomFunctions.Register(GlobalFramework.Settings["appName"], Resx.ResourceManager, false); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); if (args == null) { _log.Debug(String.Format("Args == null", args)); Console.WriteLine("args is null"); // Check for null array } else { if (args.Length > 0) { _log.Debug(String.Format("args[{0}]==[{1}]", args[0].ToUpper(), "logicpos".ToUpper())); } //Run in BackOffice Mode if (args.Length > 0 && args[0].ToUpper() == "logicpos".ToUpper()) { _log.Debug("Before Application.Run(new FormReporting())"); try { _log.Debug("Before new FormReporting() 2"); FormReporting reporting = new FormReporting(); _log.Debug("After new FormReporting() 2"); Application.Run(reporting); _log.Debug("After new reporting.ShowDialog"); } catch (Exception ex) { _log.Error(ex.Message, ex); } _log.Debug("After Application.Run(new FormReporting())"); } //Run in logicpos.reports Mode else { // Application.Run(new StartupWindow()); Application.Run(new FormReporting()); } _log.Debug(String.Format("Args != null", args)); } }
public static UnitOfWork CreateSession(string connectionStringName) { var conectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString; var dataLayer = XpoDefault.GetDataLayer(conectionString, AutoCreateOption.None); return new UnitOfWork(dataLayer, dataLayer); }
static void Main() { // // XPOには、NestedUnitOfWorkというクラスが存在する。 // このクラスは、文字通りネストしたUOWを示す。 //(サブトランザクションのようなイメージ) // // NestedUnitOfWork内でコミットされた変更は // 親のUOWにてコミットされない限り、確定しない。 // これは、別のUOWからは変更が見えないという意味であり // 親のUOWからはNestedUnitOfWorkの変更は見える。 // // 概念的には、DBのトランザクションやTransactionScopeと同じ。 // // 画面にて別画面を開いて、データを編集してまた戻ってくる場合などに利用できる。 // (Tutorial 4はそのパターンを実装してくれている。) // // NestedUnitOfWork内では、オブジェクトを親のUOWと明確に分けて取得することが出来る。 // ・GetNestedObject // また、NestedUnitOfWork内で親側のUOWからオブジェクトを取得することも出来る。 // ・GetParentObject // // [参考リソース] // http://documentation.devexpress.com/#XPO/CustomDocument2260 // http://documentation.devexpress.com/#XPO/CustomDocument2113 // XpoDefault.DataLayer = XpoDefault.GetDataLayer(MSSqlCEConnectionProvider.GetConnectionString("XPOSample07.sdf"), AutoCreateOption.DatabaseAndSchema); XpoDefault.Session = null; // // 初期データ生成. // using (var uow = new UnitOfWork()) { uow.Delete(new XPCollection <Customer>(uow)); for (int i = 0; i < 10; i++) { new Customer(uow) { Name = string.Format("Customer-[{0}]", i), Age = i + 30 }; } uow.CommitChanges(); } // // NestedUnitOfWorkを作成して親UOWがコミットしていない状態での値を確認. // var criteria = CriteriaOperator.Parse("Age = 33"); using (var uow = new UnitOfWork()) { using (var nuow = uow.BeginNestedUnitOfWork()) { var nuowCustomer = nuow.FindObject <Customer>(criteria); nuowCustomer.Name = "Modified"; nuow.CommitChanges(); } var theCustomer = uow.FindObject <Customer>(criteria); Console.WriteLine(theCustomer.Name); // // わざと親のUOWではCommitChangesを呼ばずに処理終了. // // 以下のコメントを外すと、変更が確定され、別のUOWでも変更が見えるようになる. //uow.CommitChanges(); } // // 別のUOWで再度同じ条件を指定して値を確認. // using (var uow = new UnitOfWork()) { var theCustomer = uow.FindObject <Customer>(criteria); Console.WriteLine(theCustomer.Name); } using (var uow = new UnitOfWork()) { var parentCustomer = uow.FindObject <Customer>(criteria); using (var nuow = uow.BeginNestedUnitOfWork()) { var nestedCustomer = nuow.GetNestedObject <Customer>(parentCustomer); nestedCustomer.Name = "Modified 2"; nuow.CommitChanges(); } // // NestedUnitOfWork側でコミット(つまり子のトランザクション)を行う事により // 親側のオブジェクトの値も変更状態となる。 // しかし、この変更は親側のトランザクションにて未コミットとなっているので // リロードするか、そのままUOWをコミットせずに終了することにより変更が破棄される。 // // 強制的に親オブジェクトの値を元に戻すには、リロード処理を行う必要がある。 // Session.Reload, Session.DropIdentityMap // もしくは、再度同じ条件でオブジェクトを取得し直す. // Console.WriteLine(parentCustomer.Name); uow.Reload(parentCustomer); Console.WriteLine(parentCustomer.Name); Console.WriteLine(uow.FindObject <Customer>(criteria).Name); } // // 別のUOWで再度同じ条件を指定して値を確認. // using (var uow = new UnitOfWork()) { var theCustomer = uow.FindObject <Customer>(criteria); Console.WriteLine(theCustomer.Name); } }
private static SelectedData GetData(IObjectSpace objectspace) { SelectedData sd = null; try { PermissionPolicyUser user; Session session = new Session(); user = objectspace.GetObjectByKey <PermissionPolicyUser>(SecuritySystem.CurrentUserId); Company cmp = null; try { Employee em = (Employee)user; cmp = em.Company; } catch { } if (cmp == null) { XPCollection <Employee> emp = new XPCollection <Employee>(session); if (user.UserName != null) { emp.Criteria = CriteriaOperator.Parse("UserName='******'"); foreach (var item in emp) { cmp = item.Company; } } } if (cmp != null) { //Initialize your data layer. //By default if you don't do this, XPO will try and use an access databse (jet) XpoDefault.DataLayer = XpoDefault.GetDataLayer(MSSqlConnectionProvider.GetConnectionString(cmp.ServerName, cmp.ERPMasterDB + cmp.Initials), AutoCreateOption.None); //XpoDefault.DataLayer = XpoDefault.GetDataLayer(MSSqlConnectionProvider.GetConnectionString("ACC00", cmp.ERPMasterDB + cmp.Initials), AutoCreateOption.None); XpoDefault.Session = session; List <Agent> agents = objectspace.GetObjects <Agent>().ToList(); string notinQuery = string.Empty; foreach (Agent agent in agents) { if (notinQuery != "") { notinQuery += ",'" + agent.Code + "'"; } else { notinQuery = "'" + agent.Code + "'"; } } string sqlquery = string.Empty; if (notinQuery == "") { sqlquery = "Select Name, Address1, Agentcode from Agent "; } else { sqlquery = "Select Name, Address1, Agentcode from Agent where agentcode not in (" + notinQuery + ")"; } //Equivalent of SELECT * FROM TableName in SQL // YourClassName would be your XPO object (your persistent object) using (var uow = new UnitOfWork()) { sd = uow.ExecuteQuery(sqlquery); } } } catch (Exception ex) { } return(sd); }
static void Main() { try { bool bCreate; System.Threading.Mutex mutex = new System.Threading.Mutex(false, "SINGILE_INSTANCE_MUTEX", out bCreate); if (!bCreate) { MessageBox.Show("程序已经启动!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Application.Exit(); return; } //设置应用程序处理异常方式:ThreadException处理 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); //处理UI线程异常 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); //处理非UI线程异常 AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); #region 应用程序的主入口点 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); BonusSkins.Register(); SkinManager.EnableFormSkins(); UserLookAndFeel.Default.SetSkinStyle("DevExpress Style"); ///// 连接数据库 ////// string ConnectionString = OracleConnectionProvider.GetConnectionString("orcl", "lime", "bestunion"); XpoDefault.DataLayer = XpoDefault.GetDataLayer(ConnectionString, AutoCreateOption.DatabaseAndSchema); SqlHelper.ConnectDb(); ///// 检查版本 /////// //string curNewestVersion = Tools.getNewVersion(); //if (string.Compare(curNewestVersion, AppInfo.AppVersion) > 0) //{ // MessageBox.Show("服务器发现更新的版本!系统需要升级", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); // Tools.DownloadNew(curNewestVersion); // SqlAssist.DisConnect(); // //启动升级拷贝 ////// // try // { // Process.Start("Upgrade.exe", curNewestVersion); // } // catch (Exception e) // { // LogUtils.Error(e.Message); // } // Application.Exit(); // return; //} ///// 检查 工作站是否进行登记 //Envior.WORKSTATIONID = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath).AppSettings.Settings["workstationID"].Value.ToString(); //string hostname = string.Empty; //string ipaddress = string.Empty; //Tools.GetIpAddress(out hostname, out ipaddress); //if (!string.IsNullOrEmpty(Envior.WORKSTATIONID)) //{ // switch (AppAction.WorkStationIsRegistered(Envior.WORKSTATIONID, hostname, ipaddress)) // { // case 0: //未登记 // MessageBox.Show("此工作站尚未登记!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); // Application.Exit(); // return; // case 2: //主机名不符 // MessageBox.Show("此工作站【计算机名称】与登记不符!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); // Application.Exit(); // return; // case 3: //ip地址不符 // MessageBox.Show("此工作站【IP地址】与登记不符!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); // Application.Exit(); // return; // default: // break; // } //} //else //{ // MessageBox.Show("未设置工作站ID!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Stop); // Application.Exit(); // return; //} Application.Run(new Frm_main()); #endregion } catch (Exception ex) { string str = GetExceptionMsg(ex, string.Empty); LogUtils.Error(str); MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public IDataStore GetConnectionProvider(string key) { string connectionString = GetConnectionString(key); return(XpoDefault.GetConnectionProvider(connectionString, AutoCreateOption.DatabaseAndSchema)); }
protected IDataLayer NewSimpleDataLayer(XafApplication application) => XpoDefault.GetDataLayer( application.ConnectionString, XpoTypesInfoHelper.GetXpoTypeInfoSource().XPDictionary, AutoCreateOption.DatabaseAndSchema );
private void Form1_Load(object sender, EventArgs e) { string connString = textBox1.Text; XpoDefault.DataLayer = XpoDefault.GetDataLayer(connString, DevExpress.Xpo.DB.AutoCreateOption.DatabaseAndSchema); }
public async Task RunAsync(int iterations) { using (var connection = GetOpenConnection()) { #pragma warning disable IDE0017 // Simplify object initialization #pragma warning disable RCS1121 // Use [] instead of calling 'First'. var tests = new Tests(); // Linq2SQL Try(() => { var l2scontext1 = GetL2SContext(connection); tests.Add(id => l2scontext1.Posts.First(p => p.Id == id), "Linq2Sql: Normal"); var l2scontext2 = GetL2SContext(connection); var compiledGetPost = CompiledQuery.Compile((Linq2Sql.DataClassesDataContext ctx, int id) => ctx.Posts.First(p => p.Id == id)); tests.Add(id => compiledGetPost(l2scontext2, id), "Linq2Sql: Compiled"); var l2scontext3 = GetL2SContext(connection); tests.Add(id => l2scontext3.ExecuteQuery <Post>("select * from Posts where Id = {0}", id).First(), "Linq2Sql: ExecuteQuery"); }, "LINQ-to-SQL"); // Entity Framework Try(() => { var entityContext = new EFContext(connection); tests.Add(id => entityContext.Posts.First(p => p.Id == id), "Entity Framework"); var entityContext2 = new EFContext(connection); tests.Add(id => entityContext2.Database.SqlQuery <Post>("select * from Posts where Id = {0}", id).First(), "Entity Framework: SqlQuery"); var entityContext3 = new EFContext(connection); tests.Add(id => entityContext3.Posts.AsNoTracking().First(p => p.Id == id), "Entity Framework: No Tracking"); }, "Entity Framework"); // Entity Framework Core Try(() => { var entityContext = new EFCoreContext(ConnectionString); tests.Add(id => entityContext.Posts.First(p => p.Id == id), "Entity Framework Core"); var entityContext2 = new EFCoreContext(ConnectionString); tests.Add(id => entityContext2.Posts.FromSql("select * from Posts where Id = {0}", id).First(), "Entity Framework Core: FromSql"); var entityContext3 = new EFContext(connection); tests.Add(id => entityContext3.Posts.AsNoTracking().First(p => p.Id == id), "Entity Framework Core: No Tracking"); }, "Entity Framework Core"); // Dapper Try(() => { var mapperConnection = GetOpenConnection(); tests.Add(id => mapperConnection.Query <Post>("select * from Posts where Id = @Id", new { Id = id }, buffered: true).First(), "Dapper: Query (buffered)"); tests.Add(id => mapperConnection.Query <Post>("select * from Posts where Id = @Id", new { Id = id }, buffered: false).First(), "Dapper: Query (non-buffered)"); tests.Add(id => mapperConnection.QueryFirstOrDefault <Post>("select * from Posts where Id = @Id", new { Id = id }), "Dapper: QueryFirstOrDefault"); var mapperConnection2 = GetOpenConnection(); tests.Add(id => mapperConnection2.Query("select * from Posts where Id = @Id", new { Id = id }, buffered: true).First(), "Dapper: Dynamic Query (buffered)"); tests.Add(id => mapperConnection2.Query("select * from Posts where Id = @Id", new { Id = id }, buffered: false).First(), "Dapper: Dynamic Query (non-buffered)"); tests.Add(id => mapperConnection2.QueryFirstOrDefault("select * from Posts where Id = @Id", new { Id = id }), "Dapper: Dynamic QueryFirstOrDefault"); // dapper.contrib var mapperConnection3 = GetOpenConnection(); tests.Add(id => mapperConnection3.Get <Post>(id), "Dapper.Contrib"); }, "Dapper"); // Dashing Try(() => { var config = new DashingConfiguration(); var database = new SqlDatabase(config, ConnectionString); var session = database.BeginTransactionLessSession(GetOpenConnection()); tests.Add(id => session.Get <Dashing.Post>(id), "Dashing Get"); }, "Dashing"); // Massive Try(() => { var massiveModel = new DynamicModel(ConnectionString); var massiveConnection = GetOpenConnection(); tests.Add(id => massiveModel.Query("select * from Posts where Id = @0", massiveConnection, id).First(), "Massive: Dynamic ORM Query"); }, "Massive"); // PetaPoco Try(() => { // PetaPoco test with all default options var petapoco = new PetaPoco.Database(ConnectionString, "System.Data.SqlClient"); petapoco.OpenSharedConnection(); tests.Add(id => petapoco.Fetch <Post>("SELECT * from Posts where Id=@0", id).First(), "PetaPoco: Normal"); // PetaPoco with some "smart" functionality disabled var petapocoFast = new PetaPoco.Database(ConnectionString, "System.Data.SqlClient"); petapocoFast.OpenSharedConnection(); petapocoFast.EnableAutoSelect = false; petapocoFast.EnableNamedParams = false; petapocoFast.ForceDateTimesToUtc = false; tests.Add(id => petapocoFast.Fetch <Post>("SELECT * from Posts where Id=@0", id).First(), "PetaPoco: Fast"); }, "PetaPoco"); // NHibernate Try(() => { var nhSession1 = NHibernateHelper.OpenSession(); tests.Add(id => nhSession1.CreateSQLQuery("select * from Posts where Id = :id") .SetInt32("id", id) .List(), "NHibernate: SQL"); var nhSession2 = NHibernateHelper.OpenSession(); tests.Add(id => nhSession2.CreateQuery("from Post as p where p.Id = :id") .SetInt32("id", id) .List(), "NHibernate: HQL"); var nhSession3 = NHibernateHelper.OpenSession(); tests.Add(id => nhSession3.CreateCriteria <Post>() .Add(Restrictions.IdEq(id)) .List(), "NHibernate: Criteria"); var nhSession4 = NHibernateHelper.OpenSession(); tests.Add(id => nhSession4 .Query <Post>() .First(p => p.Id == id), "NHibernate: LINQ"); var nhSession5 = NHibernateHelper.OpenSession(); tests.Add(id => nhSession5.Get <Post>(id), "NHibernate: Session.Get"); }, "NHibernate"); // Belgrade Try(() => { var query = new Belgrade.SqlClient.SqlDb.QueryMapper(ConnectionString); tests.AsyncAdd(id => query.Sql("SELECT TOP 1 * FROM Posts WHERE Id = @Id").Param("Id", id).Map( reader => { var post = new Post(); post.Id = reader.GetInt32(0); post.Text = reader.GetString(1); post.CreationDate = reader.GetDateTime(2); post.LastChangeDate = reader.GetDateTime(3); post.Counter1 = reader.IsDBNull(4) ? null : (int?)reader.GetInt32(4); post.Counter2 = reader.IsDBNull(5) ? null : (int?)reader.GetInt32(5); post.Counter3 = reader.IsDBNull(6) ? null : (int?)reader.GetInt32(6); post.Counter4 = reader.IsDBNull(7) ? null : (int?)reader.GetInt32(7); post.Counter5 = reader.IsDBNull(8) ? null : (int?)reader.GetInt32(8); post.Counter6 = reader.IsDBNull(9) ? null : (int?)reader.GetInt32(9); post.Counter7 = reader.IsDBNull(10) ? null : (int?)reader.GetInt32(10); post.Counter8 = reader.IsDBNull(11) ? null : (int?)reader.GetInt32(11); post.Counter9 = reader.IsDBNull(12) ? null : (int?)reader.GetInt32(12); }), "Belgrade Sql Client"); }, "Belgrade Sql Client"); //Susanoo Try(() => { var susanooDb = new DatabaseManager(connection); var susanooPreDefinedCommand = CommandManager.Instance.DefineCommand("SELECT * FROM Posts WHERE Id = @Id", CommandType.Text) .DefineResults <Post>() .Realize(); var susanooDynamicPreDefinedCommand = CommandManager.Instance.DefineCommand("SELECT * FROM Posts WHERE Id = @Id", CommandType.Text) .DefineResults <dynamic>() .Realize(); tests.Add(Id => CommandManager.Instance.DefineCommand("SELECT * FROM Posts WHERE Id = @Id", CommandType.Text) .DefineResults <Post>() .Realize() .Execute(susanooDb, new { Id }).First(), "Susanoo: Mapping Cache Retrieval"); tests.Add(Id => CommandManager.Instance.DefineCommand("SELECT * FROM Posts WHERE Id = @Id", CommandType.Text) .DefineResults <dynamic>() .Realize() .Execute(susanooDb, new { Id }).First(), "Susanoo: Dynamic Mapping Cache Retrieval"); tests.Add(Id => susanooDynamicPreDefinedCommand .Execute(susanooDb, new { Id }).First(), "Susanoo: Dynamic Mapping Static"); tests.Add(Id => susanooPreDefinedCommand .Execute(susanooDb, new { Id }).First(), "Susanoo: Mapping Static"); }, "Susanoo"); //ServiceStack's OrmLite: Try(() => { var dbFactory = new OrmLiteConnectionFactory(ConnectionString, SqlServerDialect.Provider); var db = dbFactory.Open(); tests.Add(id => db.SingleById <Post>(id), "ServiceStack.OrmLite: SingleById"); }, "ServiceStack.OrmLite"); // Hand Coded Try(() => { var postCommand = new SqlCommand() { Connection = connection, CommandText = @"select Id, [Text], [CreationDate], LastChangeDate, Counter1,Counter2,Counter3,Counter4,Counter5,Counter6,Counter7,Counter8,Counter9 from Posts where Id = @Id" }; var idParam = postCommand.Parameters.Add("@Id", SqlDbType.Int); tests.Add(id => { idParam.Value = id; using (var reader = postCommand.ExecuteReader()) { reader.Read(); var post = new Post(); post.Id = reader.GetInt32(0); post.Text = reader.GetNullableString(1); post.CreationDate = reader.GetDateTime(2); post.LastChangeDate = reader.GetDateTime(3); post.Counter1 = reader.GetNullableValue <int>(4); post.Counter2 = reader.GetNullableValue <int>(5); post.Counter3 = reader.GetNullableValue <int>(6); post.Counter4 = reader.GetNullableValue <int>(7); post.Counter5 = reader.GetNullableValue <int>(8); post.Counter6 = reader.GetNullableValue <int>(9); post.Counter7 = reader.GetNullableValue <int>(10); post.Counter8 = reader.GetNullableValue <int>(11); post.Counter9 = reader.GetNullableValue <int>(12); } }, "Hand Coded"); #if !NETSTANDARD1_3 var table = new DataTable { Columns = { { "Id", typeof(int) }, { "Text", typeof(string) }, { "CreationDate", typeof(DateTime) }, { "LastChangeDate", typeof(DateTime) }, { "Counter1", typeof(int) }, { "Counter2", typeof(int) }, { "Counter3", typeof(int) }, { "Counter4", typeof(int) }, { "Counter5", typeof(int) }, { "Counter6", typeof(int) }, { "Counter7", typeof(int) }, { "Counter8", typeof(int) }, { "Counter9", typeof(int) }, } }; tests.Add(id => { idParam.Value = id; var values = new object[13]; using (var reader = postCommand.ExecuteReader()) { reader.Read(); reader.GetValues(values); table.Rows.Add(values); } }, "DataTable via IDataReader.GetValues"); #endif }, "Hand Coded"); // DevExpress.XPO Try(() => { var dataLayer = XpoDefault.GetDataLayer(connection, DevExpress.Xpo.DB.AutoCreateOption.SchemaAlreadyExists); dataLayer.Dictionary.GetDataStoreSchema(typeof(Xpo.Post)); var session = new UnitOfWork(dataLayer, dataLayer); session.IdentityMapBehavior = IdentityMapBehavior.Strong; session.TypesManager.EnsureIsTypedObjectValid(); tests.Add(id => session.Query <Xpo.Post>().First(p => p.Id == id), "DevExpress.XPO: Query<T>"); tests.Add(id => session.GetObjectByKey <Xpo.Post>(id, true), "DevExpress.XPO: GetObjectByKey<T>"); tests.Add(id => { CriteriaOperator findCriteria = new BinaryOperator() { OperatorType = BinaryOperatorType.Equal, LeftOperand = new OperandProperty("Id"), RightOperand = new ConstantValue(id) }; session.FindObject <Xpo.Post>(findCriteria); }, "DevExpress.XPO: FindObject<T>"); }, "DevExpress.XPO"); // Subsonic isn't maintained anymore - doesn't import correctly //Try(() => // { // // Subsonic ActiveRecord // tests.Add(id => 3SubSonic.Post.SingleOrDefault(x => x.Id == id), "SubSonic ActiveRecord.SingleOrDefault"); // // Subsonic coding horror // SubSonic.tempdbDB db = new SubSonic.tempdbDB(); // tests.Add(id => new SubSonic.Query.CodingHorror(db.Provider, "select * from Posts where Id = @0", id).ExecuteTypedList<Post>(), "SubSonic Coding Horror"); //}, "Subsonic"); //// BLToolkit - doesn't import correctly in the new .csproj world //var db1 = new DbManager(GetOpenConnection()); //tests.Add(id => db1.SetCommand("select * from Posts where Id = @id", db1.Parameter("id", id)).ExecuteList<Post>(), "BLToolkit"); Console.WriteLine(); Console.WriteLine("Running..."); await tests.RunAsync(iterations).ConfigureAwait(false); #pragma warning restore RCS1121 // Use [] instead of calling 'First'. #pragma warning restore IDE0017 // Simplify object initialization } }
public virtual IDataStore CreateUpdatingStore(bool allowUpdateSchema, out IDisposable[] disposableObjects) { disposableObjects = null; return(new DataStoreProxy(XpoDefault.GetConnectionProvider(_connectionString, AutoCreateOption.DatabaseAndSchema))); }
//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 = AutoCreateOption.None; bool enableCachingNode = false; try { createOption = Conversion.GetConfigOption <AutoCreateOption>(connectionString, "AutoCreateOption", AutoCreateOption.DatabaseAndSchema); enableCachingNode = Conversion.GetConfigOption(connectionString, "EnableCachingNode", false); } catch (Exception ex) { throw new Exception(String.Format("XpoDatabase was unable to parse connectionString!\n{0}", ex.InnerException == null ? ex.Message : ex.InnerException.Message)); } XPDictionary dataDictionary = new ReflectionDictionary(); IDataStore dataStore = XpoDefault.GetConnectionProvider(XpoDefault.GetConnectionPoolString(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); }
public DataStoreProxy(string connectionString, AutoCreateOption autoCreateOption = AutoCreateOption.None) : this(XpoDefault.GetConnectionProvider(connectionString, autoCreateOption)) { }
public static void Tests(string name, string connectionString) => Describe($"{nameof(TokenCleanupService)} using {name}", () => { var storeOptions = new OperationalStoreOptions(); var dataLayer = XpoDefault.GetDataLayer(connectionString, DevExpress.Xpo.DB.AutoCreateOption.DatabaseAndSchema); TokenCleanupService CreateSut() { IServiceCollection services = new ServiceCollection(); services.AddIdentityServer() .AddTestUsers(new List <TestUser>()) .AddInMemoryClients(new List <Client>()) .AddInMemoryIdentityResources(new List <IdentityResource>()) .AddInMemoryApiResources(new List <ApiResource>()); services.AddTransient(_ => { var uow = new UnitOfWork(dataLayer); uow.UpdateSchema(); return(uow); }); services.AddTransient <IPersistedGrantStore, PersistedGrantStore>(); services.AddTransient <IDeviceFlowStore, DeviceFlowStore>(); services.AddTransient <TokenCleanupService>(); services.AddSingleton(storeOptions); return(services.BuildServiceProvider().GetRequiredService <TokenCleanupService>()); } It("RemoveExpiredGrantsAsync when expired grants exist should remove expired grants", async() => { var key = Guid.NewGuid().ToString(); using (var uow1 = new UnitOfWork(dataLayer)) { var expiredGrant = new XpoPersistedGrant(uow1) { Key = key, ClientId = "app1", Type = "reference", SubjectId = "123", Expiration = DateTime.UtcNow.AddDays(-3), Data = "{!}" }; await uow1.SaveAsync(expiredGrant); await uow1.CommitChangesAsync(); } await CreateSut().RemoveExpiredGrantsAsync(); using (var uow2 = new UnitOfWork(dataLayer)) { (await uow2.Query <XpoPersistedGrant>() .FirstOrDefaultAsync(x => x.Key == key) ).Should().BeNull(); } }); It("RemoveExpiredGrantsAsync when valid Grants exist expect valid Grants in Db", async() => { var key = Guid.NewGuid().ToString(); using (var uow1 = new UnitOfWork(dataLayer)) { var validGrant = new XpoPersistedGrant(uow1) { Key = key, ClientId = "app1", Type = "reference", SubjectId = "123", Expiration = DateTime.UtcNow.AddDays(3), Data = "{!}" }; await uow1.SaveAsync(validGrant); await uow1.CommitChangesAsync(); } await CreateSut().RemoveExpiredGrantsAsync(); using (var uow2 = new UnitOfWork(dataLayer)) { (await uow2.Query <XpoPersistedGrant>() .FirstOrDefaultAsync(x => x.Key == key) ).Should().NotBeNull(); } }); It("RemoveExpiredGrantsAsync when expired DeviceGrants exist expect expired DeviceGrants to be removed", async() => { var deviceCode = Guid.NewGuid().ToString(); using (var uow1 = new UnitOfWork(dataLayer)) { var expiredGrant = new XpoDeviceFlowCodes(uow1) { DeviceCode = deviceCode, UserCode = Guid.NewGuid().ToString(), ClientId = "app1", SubjectId = "123", CreationTime = DateTime.UtcNow.AddDays(-4), Expiration = DateTime.UtcNow.AddDays(-3), Data = "{!}" }; await uow1.SaveAsync(expiredGrant); await uow1.CommitChangesAsync(); } await CreateSut().RemoveExpiredGrantsAsync(); using (var uow2 = new UnitOfWork(dataLayer)) { (await uow2.Query <XpoDeviceFlowCodes>() .FirstOrDefaultAsync(x => x.DeviceCode == deviceCode) ).Should().BeNull(); } }); It("RemoveExpiredGrantsAsync when valid DeviceGrants exist expect valid DeviceGrants to be in Db", async() => { var deviceCode = Guid.NewGuid().ToString(); using (var uow1 = new UnitOfWork(dataLayer)) { var validGrant = new XpoDeviceFlowCodes(uow1) { DeviceCode = deviceCode, UserCode = "2468", ClientId = "app1", SubjectId = "123", CreationTime = DateTime.UtcNow.AddDays(-4), Expiration = DateTime.UtcNow.AddDays(3), Data = "{!}" }; await uow1.SaveAsync(validGrant); await uow1.CommitChangesAsync(); } await CreateSut().RemoveExpiredGrantsAsync(); using (var uow2 = new UnitOfWork(dataLayer)) { (await uow2.Query <XpoDeviceFlowCodes>() .FirstOrDefaultAsync(x => x.DeviceCode == deviceCode) ).Should().NotBeNull(); } }); });
public static DevExpress.Xpo.DB.IDataStore GetConnectionProvider(IConfiguration configuration, DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { return(XpoDefault.GetConnectionProvider(configuration.GetConnectionString(ConnectionStringName), autoCreateOption)); }
static Service1() { string connectionString = MSSqlConnectionProvider.GetConnectionString("localhost", "ServiceDB"); DataStore = XpoDefault.GetConnectionProvider(connectionString, AutoCreateOption.DatabaseAndSchema); }
static void Main() { XpoDefault.DataLayer = XpoDefault.GetDataLayer(AutoCreateOption.DatabaseAndSchema); Application.Run(new Form1()); }
//LogicPos BootStrap private static void Init() { Console.WriteLine(string.Format("BootStrap {0}....", SettingsApp.AppName)); try { //Prepare AutoCreateOption AutoCreateOption xpoAutoCreateOption = AutoCreateOption.None; //Init Settings Main Config Settings //GlobalFramework.Settings = ConfigurationManager.AppSettings; //CultureInfo/Localization if (GlobalFramework.Settings["culture"] != null) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(GlobalFramework.Settings["culture"]); } GlobalFramework.CurrentCulture = CultureInfo.CurrentUICulture; //Always use en-US NumberFormat because of mySql Requirements GlobalFramework.CurrentCultureNumberFormat = CultureInfo.GetCultureInfo(SettingsApp.CultureNumberFormat); // Init Paths GlobalFramework.Path = new Hashtable(); GlobalFramework.Path.Add("temp", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathTemp"])); GlobalFramework.Path.Add("saftpt", FrameworkUtils.OSSlash(GlobalFramework.Settings["pathSaftPt"])); //Create Directories FrameworkUtils.CreateDirectory(FrameworkUtils.OSSlash(Convert.ToString(GlobalFramework.Path["temp"]))); FrameworkUtils.CreateDirectory(FrameworkUtils.OSSlash(Convert.ToString(GlobalFramework.Path["saftpt"]))); //Get DataBase Details GlobalFramework.DatabaseType = (DatabaseType)Enum.Parse(typeof(DatabaseType), GlobalFramework.Settings["databaseType"]); GlobalFramework.DatabaseName = SettingsApp.DatabaseName; //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); throw; } //Get Terminal from Db GlobalFramework.LoggedTerminal = Utils.GetTerminal(); //SettingsApp SettingsApp.ConfigurationSystemCountry = (CFG_ConfigurationCountry)FrameworkUtils.GetXPGuidObject(GlobalFramework.SessionXpo, typeof(CFG_ConfigurationCountry), new Guid(GlobalFramework.Settings["xpoOidConfigurationCountrySystemCountry"])); SettingsApp.ConfigurationSystemCurrency = (CFG_ConfigurationCurrency)FrameworkUtils.GetXPGuidObject(GlobalFramework.SessionXpo, typeof(CFG_ConfigurationCurrency), new Guid(GlobalFramework.Settings["xpoOidConfigurationCurrencySystemCurrency"])); //PreferenceParameters GlobalFramework.PreferenceParameters = FrameworkUtils.GetPreferencesParameters(); //Try to Get open Session Day/Terminal for this Terminal GlobalFramework.WorkSessionPeriodDay = ProcessWorkSessionPeriod.GetSessionPeriod(WorkSessionPeriodType.Day); GlobalFramework.WorkSessionPeriodTerminal = ProcessWorkSessionPeriod.GetSessionPeriod(WorkSessionPeriodType.Terminal); //Init FastReports Custom Functions and Custom Vars CustomFunctions.Register(SettingsApp.AppName); //Init AppSession //string appSessionFile = SettingsApp.AppSessionFile; //if (File.Exists(appSessionFile)) //{ // GlobalFramework.SessionApp = GlobalFrameworkSession.InitSession(appSessionFile); //} //else //{ // throw new Exception(string.Format("Missing appSessionFile: {0}", appSessionFile)); //} } catch (Exception ex) { _log.Error(ex.Message, ex); } }
public static DevExpress.Xpo.DB.IDataStore GetConnectionProvider(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect) { return(XpoDefault.GetConnectionProvider(ConnectionString, autoCreateOption, out objectsToDisposeOnDisconnect)); }
public override void AfterConstruction() { base.AfterConstruction(); _oid = XpoDefault.NewGuid(); }
static void ConfigureXpoForDevEnvironment() { XpoDefault.RegisterBonusProviders(); DataStoreBase.RegisterDataStoreProvider(WebApiDataStoreClient.XpoProviderTypeString, CreateWebApiDataStoreFromString); }
public virtual IDataStore CreateSchemaCheckingDataStore() { var dataStore = XpoDefault.GetConnectionProvider(ConnectionString, AutoCreateOption.None); return(dataStore); }