Пример #1
0
        public static List <T> LoadMany <T>(this DirectDatabaseBase db, string whereCommand = "")
        {
            T           temp  = (T)Activator.CreateInstance(typeof(T));
            DirectModel model = temp as DirectModel;

            if (model == null)
            {
                throw new Exception("Cast error");
            }

            string command = string.Format("SELECT * FROM {0}.{1}.{2}{3}",
                                           db.DatabaseName, db.DatabaseScheme, model.GetTableName(), (!string.IsNullOrEmpty(whereCommand) ? " WHERE " + whereCommand : ""));

            DirectContainer dc = db.LoadContainer(command);

            return(dc.ConvertList <T>());
        }
        private void RunInserter()
        {
            if (this._queryInserter.Count == 0 && this._queryLoader.Count == 0)
            {
                return;
            }

            string             mainQuery        = "START TRANSACTION;";
            string             finalSelect      = "SELECT ";
            List <string>      variables        = new List <string>();
            List <DirectModel> modelsToWorkWith = new List <DirectModel>();

            lock (_queryLoaderLockObj)
            {
                // Loaders
                foreach (var umodel in this._queryLoader)
                {
                    string variable_name = string.Format("{0}_{1}", umodel.Key.IdName, umodel.Key.InternalID);
                    mainQuery += umodel.Key.GetDatabase().ConstructVariable(variable_name) + string.Format("({0});", umodel.Value) + Environment.NewLine;
                    variables.Add(variable_name);
                    finalSelect += (finalSelect.Equals("SELECT ") ? "" : ",") + string.Format("@{0} AS '{0}'", variable_name);
                    modelsToWorkWith.Add(umodel.Key);
                }
                this._queryLoader = new Dictionary <DirectModel, string>();
            }

            lock (_queryInserterLockObj)
            {
                // Inserters
                foreach (var model in this._queryInserter)
                {
                    string variable_name = string.Format("{0}_{1}", model.IdName, model.InternalID);
                    mainQuery += model.ConstructInsertQuery(variables) + Environment.NewLine;
                    mainQuery += model.GetDatabase().ConstructVariable(variable_name) + string.Format("(SELECT {0});", model.GetDatabase().QueryScopeID) + Environment.NewLine;
                    variables.Add(variable_name);
                    finalSelect += (finalSelect.Equals("SELECT ") ? "" : ",") + string.Format("@{0} AS '{0}'", variable_name);
                    modelsToWorkWith.Add(model);
                }
                this._queryInserter = new List <DirectModel>();
            }

            DateTime        dccounter  = DateTime.Now;
            DirectContainer dc         = this._database.LoadContainer(mainQuery + "COMMIT;" + finalSelect);
            double          miliseonds = (DateTime.Now - dccounter).TotalMilliseconds;

            dccounter = DateTime.Now;
            foreach (string columnname in dc.ColumnNames)
            {
                // We split variable because format is (variableName_modelKey)
                string[] variableSplit = columnname.Split('_');
                string   parameterName = variableSplit[0];
                string   chidrenID     = variableSplit[1];

                int?id = dc.GetInt(columnname);
                foreach (var model in modelsToWorkWith)
                {
                    model.CastProperty(parameterName, id.ToString(), chidrenID);
                }
            }
            double miliseonds1 = (DateTime.Now - dccounter).TotalMilliseconds;

            int a = 0;
        }
Пример #3
0
 public abstract void BulkCopy(DirectContainer table, string tableName);