コード例 #1
0
        /// <summary>
        /// Очищает текущую коллекцию и заново подгружает все элементы из БД
        /// </summary>
        public void Reset()
        {
            Clear();
            var dbConnection = Astu.DbConnection;
            var type         = typeof(TEntity);

            // Создаем SQL команду для выполнения запроса и загрузки данных
            var dbCommand = dbConnection.CreateCommand();

            dbCommand.CommandText = QueryProvider.GetSelectQuery(type, _sqlOption);

            // Получаем коллекцию загружаемых полей объекта
            var fields = type.GetProperties().Where(pi => pi.GetCustomAttributes(typeof(DbFieldInfoAttribute), true).Count() > 0).OrderBy(pi => pi.Name);

            // Выполняем запрос и отображаем реляционные данные в объекты
            using (var reader = dbCommand.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        // создаем объект типа
                        var     ci     = type.GetConstructor(new Type[] { });
                        TEntity record = (TEntity)ci.Invoke(null);
                        int     i      = 0;
                        foreach (var f in fields)
                        {
                            object value = reader.GetValue(i);

                            // SCRUTCH: проверка типов
                            if (value.GetType() == typeof(DBNull))
                            {
                                value = null;
                            }
                            else
                            {
                                if (value.GetType() == typeof(decimal))
                                {
                                    if (f.PropertyType == typeof(bool))
                                    {
                                        if ((value as decimal?) > 0)
                                        {
                                            value = (bool)true;
                                        }
                                        else
                                        {
                                            value = (bool)false;
                                        }
                                    }
                                    else
                                    {
                                        if (f.PropertyType == typeof(int) || f.PropertyType == typeof(int?))
                                        {
                                            value = Convert.ToInt32(value);
                                        }
                                    }
                                }
                            }

                            f.SetValue(record, value, null);
                            i++;
                        }

                        (record as Entity).EntityState = EntityState.Default;
                        base.Add((TEntity)record);
                    }
                }
            }
        }
コード例 #2
0
 public string GetSaveQuery()
 {
     return(string.Format("{0};", QueryProvider.GetSaveQuery(this)));
 }