private List <T> QueryToList <T>(QueryBuilderModel query) where T : IEntity, new() { List <IEntity> entityList = new List <IEntity>(); // Reader Adapter ------------------------------------ IEntity ReaderAdapter(Type type, IDictionary <string, object> row, string parent = null) { var entityInfo = DataReflection.GetEntityInfo(type); //object newEntity = Activator.CreateInstance(type); IEntity newEntity = (IEntity)Activator.CreateInstance(type); object id; row.TryGetValue($"{(parent == null ? "o" : parent)}.{entityInfo.Attribute.FieldPrimaryKey}", out id); newEntity.Id = Convert.ToInt64(id); // fields ----------------------------------- foreach (var field in entityInfo.Fields) { string key = $"{(parent == null ? "o" : parent)}.{field.Attribute.FieldName}"; object valueNative; row.TryGetValue(key, out valueNative); object valueFormated = this.ValueFormatFromSql(key, valueNative); try { field.Property.SetValue(newEntity, valueFormated); } catch (Exception ex1) { try { field.Property.SetValue(newEntity, valueFormated.ToString()); } catch (Exception ex) { throw ex; } } } // emptyJoins ----------------------------------- foreach (var join in entityInfo.Joins) { string key = $"{(parent == null ? "o" : parent)}.{join.Attribute.LeftFieldName}"; // value is a entity object joinValue = (IEntity)Activator.CreateInstance(join.EntityFieldType); object joinValueId = 0; row.TryGetValue(key, out joinValueId); (joinValue as IEntity).Id = Convert.ToInt64(joinValueId); join.Property.SetValue(newEntity, joinValue); } // joins ----------------------------------- foreach (var join in entityInfo.Joins) { string fieldKey = $"{(parent == null ? "" : $"{parent}__")}{join.Property.Name}"; bool joinIncluded = false; foreach (var c in row) { if (c.Key.StartsWith($"{fieldKey}.")) { joinIncluded = true; break; } } if (joinIncluded) { IEntity joinValue = ReaderAdapter(join.EntityFieldType, row, fieldKey); join.Property.SetValue(newEntity, joinValue); } } return(newEntity); }
private void ExecuteReader(QueryBuilderModel query, Action <MySqlDataReader> callback) { var builderAdapter = new MySqlQueryBuilderAdapter(query); ExecuteReader(builderAdapter, callback); }
private long ExecuteNonQuery(QueryBuilderModel query, bool returnLastInsertedId = false) { var builderAdapter = new MySqlQueryBuilderAdapter(query); return(ExecuteNonQuery(builderAdapter, returnLastInsertedId)); }
private object ExecuteScalar(QueryBuilderModel query) { var builderAdapter = new MySqlQueryBuilderAdapter(query); return(ExecuteScalar(builderAdapter)); }
public TQuery From(QueryBuilderModel query) { this.Model.From = query; return(this as TQuery); }