public void Fill(DatabaseTable <T> db, Dictionary <string, object> param = null)
        {
            if (tables.Count == 0)
            {
                fillAllTables();
            }
            db.Clear();
            DatabaseTable <T> tab = tables[db.TableName] as DatabaseTable <T>;

            IEnumerable <T> res = null;

            if (param != null)
            {
                foreach (var p in param)
                {
                    res = tab.Where((r) => { return(r[p.Key].Equals(p.Value == null ? 0 : p.Value)); });
                }
            }
            else
            {
                res = tab;
            }
            foreach (var r in res)
            {
                db.Add(r);
            }
        }
        public TDtoType Add(TDtoType dto)
        {
            var entity      = Converter.ToEntity(dto);
            var addedEntity = DatabaseTable.Add(entity);

            VirtualWorkDatabase.SaveChanges();
            return(Converter.ToDto(addedEntity));
        }
        internal void fillInner(DatabaseTable <T> db)
        {
            db.Clear();
            DatabaseTable <Shifts> shift = new DatabaseTable <Shifts>();
            string path     = "";
            string fileName = "";

            if (DataProviderFactory.settings.Count != 0)
            {
                path     = DataProviderFactory.settings["path"].ToString();
                fileName = Path.Combine(path, db.TableName + ".json");
            }
            else
            {
                path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                string dir = Path.Combine(path, "ShiftData");
                fileName = Path.Combine(dir, db.TableName + ".json");
            }

            using (StreamReader r = new StreamReader(fileName))
            {
                string json = r.ReadToEnd();
                JavaScriptSerializer        jss   = new JavaScriptSerializer();
                Dictionary <string, Object> table = jss.Deserialize <Dictionary <string, Object> >(json);
                string        tableName           = table["TableName"] as string;
                ArrayList     records             = table["Records"] as ArrayList;
                List <string> flds = null;
                foreach (Dictionary <string, object> rec in records)
                {
                    T record = (T)Activator.CreateInstance(typeof(T), new object[] { db });
                    if (flds == null)
                    {
                        flds = record.DataFields;
                    }
                    db.Fields = flds;
                    for (int i = 0; i < flds.Count; i++)
                    {
                        object       val  = rec[flds[i]];
                        PropertyInfo prop = record.GetType().GetProperty(flds[i]);
                        prop.SetValue(record, (val), null);
                    }

                    db.Add(record);
                }
            }
        }
        public void Fill(DatabaseTable <T> db, Dictionary <string, object> param = null)
        {
            string sql;

            db.Clear();
            var props = typeof(T).GetProperties();

            string    columns      = "SELECT ";
            ArrayList arrayOfJoins = new ArrayList();
            string    FirstTable   = typeof(T).ToString().Substring(typeof(T).ToString().IndexOf('.') + 1);

            FirstTable = FirstTable.ToString().Substring(FirstTable.ToString().IndexOf('.') + 1);
            String NameOfJoined     = "";
            String ForeignKey       = "";
            String ForeignTableName = "";
            List <Tuple <String, String, String> > Joining = new List <Tuple <string, string, string> >();

            foreach (var prop in props)
            {
                var CA = prop.GetCustomAttribute(typeof(ShiftDbData), false);
                if (CA != null)
                {
                    var refe = prop.GetCustomAttribute(typeof(ReferenceData), false);


                    if (refe == null)
                    {
                        string column = prop.Name;
                        columns += (FirstTable + "." + column + ", ");
                    }
                    else
                    {
                        ReferenceData da = refe as ReferenceData;
                        if (da != null)
                        {
                            NameOfJoined     = da.TableName;
                            ForeignKey       = da.ForeignKey;
                            ForeignTableName = da.ForeignTableName;
                            Joining.Add(new Tuple <String, String, String>(da.TableName, da.ForeignKey, da.ForeignTableName));
                        }
                        string joinedColumn = prop.ToString().Substring(prop.ToString().IndexOf(' ') + 1);
                        columns += (NameOfJoined + "." + joinedColumn + ", ");
                        arrayOfJoins.Add(joinedColumn);
                    }
                }
            }
            columns  = columns.Substring(0, columns.Length - 2);
            columns += (" FROM " + FirstTable);
            if (arrayOfJoins != null)
            {
                foreach (var r in Joining)
                {
                    columns += (" LEFT OUTER JOIN " + r.Item1 + " ON " + r.Item1 + "." + r.Item2 + " = " + (r.Item3 == "" ? FirstTable : r.Item3) + "." + r.Item2);
                }
            }
            if (param != null && param.Count >= 1)
            {
                columns += " WHERE ";
                foreach (var p in param)
                {
                    if (p.Value == null)
                    {
                        columns += p.Key + " is null ";
                    }
                    else
                    {
                        columns += p.Key + " = @" + p.Key.Split(".".ToCharArray()).Last();
                    }
                }
            }
            sql = columns;
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                conn.Open();

                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    if (param != null)
                    {
                        foreach (var par in param)
                        {
                            if (par.Value != null)
                            {
                                cmd.Parameters.AddWithValue(par.Key.Split(".".ToCharArray()).Last(), par.Value);
                            }
                        }
                    }
                    using (SqlDataReader sr = cmd.ExecuteReader())
                    {
                        if (db.Fields == null)
                        {
                            db.Fields = new List <string>();
                            for (int i = 0; i < sr.FieldCount; i++)
                            {
                                db.Fields.Add(sr.GetName(i));
                            }
                        }

                        while (sr.Read())
                        {
                            T record = (T)Activator.CreateInstance(typeof(T), new object[] { db });
                            for (int i = 0; i < sr.FieldCount; i++)
                            {
                                object       val  = sr[i];
                                PropertyInfo prop = record.GetType().GetProperty(db.Fields[i]);
                                prop.SetValue(record, (val == DBNull.Value?null:val), null);
                            }
                            db.Add(record);
                        }
                    }
                }
            }
        }