示例#1
0
        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);
            }
示例#2
0
        private void ExecuteReader(QueryBuilderModel query, Action <MySqlDataReader> callback)
        {
            var builderAdapter = new MySqlQueryBuilderAdapter(query);

            ExecuteReader(builderAdapter, callback);
        }
示例#3
0
        private long ExecuteNonQuery(QueryBuilderModel query, bool returnLastInsertedId = false)
        {
            var builderAdapter = new MySqlQueryBuilderAdapter(query);

            return(ExecuteNonQuery(builderAdapter, returnLastInsertedId));
        }
示例#4
0
        private object ExecuteScalar(QueryBuilderModel query)
        {
            var builderAdapter = new MySqlQueryBuilderAdapter(query);

            return(ExecuteScalar(builderAdapter));
        }
示例#5
0
 public TQuery From(QueryBuilderModel query)
 {
     this.Model.From = query;
     return(this as TQuery);
 }