/// <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); } } } }
public string GetSaveQuery() { return(string.Format("{0};", QueryProvider.GetSaveQuery(this))); }