Пример #1
0
        public string Remove(T entity)
        {
            string sql = query;

            if (string.IsNullOrEmpty(EntityMap.PrimaryKeyName))
            {
                foreach (var keyValue in EntityMap.Entities)
                {
                    IEntityMap entityMap = keyValue.Value;
                    object     obj       = EntityMap.Type.GetProperty(keyValue.Key).GetValue(entity);
                    if (obj != null)
                    {
                        if (!string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                        {
                            var value = entityMap.Type.GetProperty(entityMap.PrimaryKeyName).GetValue(obj);
                            sql = sql.Replace("{" + keyValue.Key + "}", DataFormater.ParseToSQL(value));
                        }
                    }
                }
            }
            else
            {
                var value = EntityMap.Type.GetProperty(EntityMap.PrimaryKeyName).GetValue(entity);
                sql = sql.Replace("{Id}", DataFormater.ParseToSQL(value));
            }
            return(sql);
        }
Пример #2
0
 protected override Expression VisitConstant(ConstantExpression node)
 {
     if (node.Value == null)
     {
         _queryBuilder.Append("NULL");
         _queryBuilder.Replace("= NULL", "IS NULL");
     }
     else
     {
         _queryBuilder.Append(DataFormater.ParseToSQL(node.Value));
     }
     return(node);
 }
Пример #3
0
 protected override Expression VisitNew(NewExpression node)
 {
     if (typeof(TimeSpan) == node.Type)
     {
         var      hour = node.Arguments[0];
         var      min  = node.Arguments[1];
         var      sec  = node.Arguments[2];
         TimeSpan time = new TimeSpan(int.Parse(hour + ""), int.Parse(min + ""), int.Parse(sec + ""));
         _queryBuilder.Append(DataFormater.ParseToSQL(time));
     }
     if (typeof(DateTime) == node.Type)
     {
         var      age   = node.Arguments[0];
         var      month = node.Arguments[1];
         var      day   = node.Arguments[2];
         DateTime date  = new DateTime(int.Parse(age + ""), int.Parse(month + ""), int.Parse(day + ""));
         _queryBuilder.Append(DataFormater.ParseToSQL(date.ToString("yyyy-MM-dd")));
     }
     return(node);
 }
Пример #4
0
        public string Update(T entity)
        {
            string sql = query;

            foreach (var keyValueColumn in EntityMap.ColumnNames)
            {
                var value = EntityMap.Type.GetProperty(keyValueColumn.Key).GetValue(entity);
                sql = sql.Replace("{" + keyValueColumn.Key + "}", DataFormater.ParseToSQL(value));
            }
            foreach (var keyValue in EntityMap.Entities)
            {
                IEntityMap entityMap = keyValue.Value;
                object     obj       = EntityMap.Type.GetProperty(keyValue.Key).GetValue(entity);
                if (obj != null)
                {
                    if (!string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                    {
                        object fk = entityMap.Type.GetProperty(entityMap.PrimaryKeyName).GetValue(obj);
                        sql = sql.Replace("{" + keyValue.Key + "}", DataFormater.ParseToSQL(fk));
                    }
                }
            }
            return(sql);
        }
Пример #5
0
        public string Insert(T entity)
        {
            try
            {
                string query = Query;
                foreach (var keyValueColumn in EntityMap.ColumnNames)
                {
                    var value = EntityMap.Type.GetProperty(keyValueColumn.Key).GetValue(entity);
                    query = query.Replace("{" + keyValueColumn.Key + "}", DataFormater.ParseToSQL(value));
                }

                if (string.IsNullOrEmpty(EntityMap.PrimaryKeyName))
                {
                    foreach (var keyValue in EntityMap.Entities)
                    {
                        IEntityMap entityMap = keyValue.Value;
                        object     obj       = EntityMap.Type.GetProperty(keyValue.Key).GetValue(entity);
                        if (obj != null)
                        {
                            if (string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                            {
                                foreach (var keyValueEntity in entityMap.Entities)
                                {
                                    IEntityMap foreignEntity = keyValueEntity.Value;
                                    object     o             = entityMap.Type.GetProperty(keyValueEntity.Key).GetValue(obj);
                                    if (o != null)
                                    {
                                        if (string.IsNullOrEmpty(foreignEntity.PrimaryKeyName))
                                        {
                                        }
                                        else
                                        {
                                            if (foreignEntity.Type.IsEnum)
                                            {
                                                if (Enum.IsDefined(foreignEntity.Type, o))
                                                {
                                                    Enum @enum = (Enum)Enum.Parse(foreignEntity.Type, o + "");
                                                    query = query.Replace("{" + keyValue.Key + "." + keyValueEntity.Key + "}", DataFormater.ParseToSQL(@enum));
                                                }
                                                else
                                                {
                                                    throw new Exception("El tipo enum [" + foreignEntity.Type + "] no tiene definido el valor [" + o + "].");
                                                }
                                            }
                                            else
                                            {
                                                var value = foreignEntity.Type.GetProperty(foreignEntity.PrimaryKeyName).GetValue(o);
                                                query = query.Replace("{" + keyValue.Key + "." + keyValueEntity.Key + "}", DataFormater.ParseToSQL(value));
                                            }
                                        }
                                    }
                                }
                                foreach (var keyValueColumn in entityMap.Keys)
                                {
                                    var value = entityMap.Type.GetProperty(keyValueColumn.Key).GetValue(obj);
                                    query = query.Replace("{" + keyValueColumn.Key + "}", DataFormater.ParseToSQL(value));
                                }
                            }
                            else
                            {
                                var value = entityMap.Type.GetProperty(entityMap.PrimaryKeyName).GetValue(obj);
                                query = query.Replace("{" + keyValue.Key + "}", DataFormater.ParseToSQL(value));
                            }
                        }
                    }
                }
                else
                {
                    foreach (var keyValuePair in EntityMap.Entities)
                    {
                        IEntityMap entityMap = keyValuePair.Value;
                        if (string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                        {
                            object obj = EntityMap.Type.GetProperty(keyValuePair.Key).GetValue(entity);
                            if (obj != null)
                            {
                                foreach (var keyValue in entityMap.Entities)
                                {
                                    IEntityMap foreignKeyEntity = keyValue.Value;
                                    if (foreignKeyEntity.Type.IsEnum)
                                    {
                                        if (Enum.IsDefined(foreignKeyEntity.Type, obj))
                                        {
                                            Enum @enum = (Enum)Enum.Parse(foreignKeyEntity.Type, obj + "");
                                            query = query.Replace("{" + keyValuePair.Key + "." + keyValue.Key + "}", DataFormater.ParseToSQL(@enum));
                                        }
                                        else
                                        {
                                            throw new Exception("El tipo enum [" + foreignKeyEntity.Type + "] no tiene definido el valor [" + obj + "].");
                                        }
                                    }
                                    else
                                    {
                                        object o     = entityMap.Type.GetProperty(keyValue.Key).GetValue(obj);
                                        var    value = foreignKeyEntity.Type.GetProperty(foreignKeyEntity.PrimaryKeyName).GetValue(o);
                                        query = query.Replace("{" + keyValuePair.Key + "." + keyValue.Key + "}", DataFormater.ParseToSQL(value));
                                    }
                                }
                                foreach (var keyValue in entityMap.Keys)
                                {
                                    var value = entityMap.Type.GetProperty(keyValue.Key).GetValue(obj);
                                    query = query.Replace("{" + keyValuePair.Key + "." + keyValue.Key + "}", DataFormater.ParseToSQL(value));
                                }
                            }
                        }
                        else
                        {
                            object obj = EntityMap.Type.GetProperty(keyValuePair.Key).GetValue(entity);
                            if (obj != null)
                            {
                                if (entityMap.Type.IsEnum)
                                {
                                    if (Enum.IsDefined(entityMap.Type, obj))
                                    {
                                        Enum @enum = (Enum)Enum.Parse(entityMap.Type, obj + "");
                                        query = query.Replace("{" + keyValuePair.Key + "}", DataFormater.ParseToSQL(@enum));
                                    }
                                    else
                                    {
                                        throw new Exception("El tipo enum [" + keyValuePair.Value.Type + "] no tiene definido el valor [" + obj + "].");
                                    }
                                }
                                else
                                {
                                    var value = entityMap.Type.GetProperty(entityMap.PrimaryKeyName).GetValue(obj);
                                    query = query.Replace("{" + keyValuePair.Key + "}", DataFormater.ParseToSQL(value));
                                }
                            }
                        }
                    }
                }
                return(query);
            }
            catch
            {
                throw;
            }
        }
Пример #6
0
        protected override Expression VisitMember(MemberExpression node)
        {
            if (node.Expression != null && node.Expression.NodeType == ExpressionType.Parameter)
            {
                var          type = node.Expression.Type;
                string       columnName;
                PropertyInfo property = type.GetProperty(node.Member.Name);
                if (!property.PropertyType.Namespace.Equals("System") && !property.PropertyType.Namespace.Equals("System.Collections.Generic"))
                {
                    Entity.ForeignKeys.TryGetValue(node.Member.Name, out columnName);
                    if (!string.IsNullOrEmpty(columnName))
                    {
                        _queryBuilder.Append("_this." + columnName);
                    }
                    else
                    {
                        IEntityMap entityMap;
                        Entity.Entities.TryGetValue(node.Member.Name, out entityMap);

                        if (string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                        {
                            string conditions = string.Empty;
                            foreach (var keyValue in Entity.ForeignKeys)
                            {
                                string query = _queryBuilder.ToString();
                                if (keyValue.Key.StartsWith(node.Member.Name) && !query.Contains("_this." + keyValue.Value))
                                {
                                    conditions += "_this." + keyValue.Value + " = {" + keyValue.Key + "} AND ";
                                }
                            }
                            if (!string.IsNullOrEmpty(conditions))
                            {
                                conditions += "-";
                                conditions  = conditions.Replace(" AND -", "");
                                _queryBuilder.Append(conditions);
                            }
                            ignoreAssignment = !string.IsNullOrEmpty(conditions);
                        }
                        else
                        {
                        }
                    }
                }
                else
                {
                    Entity.ColumnNames.TryGetValue(node.Member.Name, out columnName);
                    _queryBuilder.Append("_this." + columnName);
                }
                return(node);
            }
            if (node.Expression != null && node.Expression.NodeType == ExpressionType.MemberAccess)
            {
                this.Visit(node.Expression);
                MemberExpression expression = node.Expression as MemberExpression;
                string           fk;
                Entity.ForeignKeys.TryGetValue(expression.Member.Name + "." + node.Member.Name, out fk);
                if (!string.IsNullOrEmpty(fk))
                {
                    _queryBuilder.Append("_this." + fk);
                }
                else
                {
                    //var property = Entity.Type.GetProperty(expression.Member.Name);
                    //if (property != null)
                    //{
                    //    if (!property.PropertyType.Namespace.Equals("System") && !property.PropertyType.Namespace.Equals("System.Collections.Generic"))
                    //    {
                    //        IEntityMap entityMap = Cfg.Configuration.Mappings.Where(e => e.Value.Type == property.PropertyType).FirstOrDefault().Value;
                    //        if (string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                    //        {

                    //        }
                    //        else
                    //        {

                    //        }
                    //    }
                    //}
                }
            }
            if (node.Expression != null && node.Expression.NodeType == ExpressionType.Constant)
            {
                ConstantExpression constantExpression = node.Expression as ConstantExpression;
                object             obj = constantExpression.Value;
                var c = obj.GetType().GetFields().Length;
                if (c > 1)
                {
                    var       fields = obj.GetType().GetFields();
                    FieldInfo field  = null;
                    foreach (var f in fields)
                    {
                        if (f.Name.Equals(node.Member.Name))
                        {
                            field = f;
                            break;
                        }
                    }
                    if (field != null)
                    {
                        object value = field.GetValue(obj);
                        if (value != null)
                        {
                            if (value.GetType() == typeof(DateTime))
                            {
                                DateTime date = (DateTime)value;
                                value = DataFormater.ParseToSQL(date.ToString("yyyy-MM-dd"));
                                _queryBuilder.Append(value);
                            }
                            else
                            {
                                Type type = value.GetType();
                                if (!type.Namespace.Equals("System") && !type.Namespace.Equals("System.Collections.Generic"))
                                {
                                    IEntityMap entityMap = Cfg.Configuration.Mappings.Where(e => e.Value.Type == type).FirstOrDefault().Value;
                                    if (!string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                                    {
                                        object id = entityMap.Type.GetProperty(entityMap.PrimaryKeyName).GetValue(value);
                                        value = DataFormater.ParseToSQL(id);
                                        _queryBuilder.Append(value);
                                    }
                                    else
                                    {
                                        foreach (var keyValue in Entity.ForeignKeys)
                                        {
                                            string query = _queryBuilder.ToString();
                                            string str   = keyValue.Key;
                                            if (query.Contains("{" + str + "}"))
                                            {
                                                if (str.Contains("."))
                                                {
                                                    var    props        = str.Split(".");
                                                    string entityName   = props[0];
                                                    string propertyName = props[1];
                                                    var    property     = type.GetProperty(propertyName);
                                                    if (!property.PropertyType.Namespace.Equals("System") && !property.PropertyType.Namespace.Equals("System.Collections.Generic"))
                                                    {
                                                        var _entity = property.GetValue(value);
                                                        entityMap = Cfg.Configuration.Mappings.Where(e => e.Value.Type == property.PropertyType).FirstOrDefault().Value;
                                                        if (string.IsNullOrEmpty(entityMap.PrimaryKeyName))
                                                        {
                                                        }
                                                        else
                                                        {
                                                            object id = property.PropertyType.GetProperty(entityMap.PrimaryKeyName).GetValue(_entity);
                                                            _queryBuilder.Replace("{" + entityName + "." + propertyName + "}", DataFormater.ParseToSQL(id));
                                                        }
                                                    }
                                                    else
                                                    {
                                                        property = type.GetProperty(propertyName);
                                                        object propertyValue = property.GetValue(value);
                                                        _queryBuilder.Replace("{" + entityName + "." + propertyName + "}", DataFormater.ParseToSQL(propertyValue));
                                                    }
                                                }
                                            }
                                        }
                                        ignoreAssignment = false;
                                    }
                                }
                                else
                                {
                                    value = DataFormater.ParseToSQL(value);
                                    _queryBuilder.Append(value);
                                }
                            }
                        }
                        else
                        {
                            value = DataFormater.ParseToSQL(value);
                            _queryBuilder.Append(value);
                        }
                    }
                }
                else
                {
                    FieldInfo field = obj.GetType().GetFields()[0];
                    object    value = field.GetValue(obj);
                    if (value != null)
                    {
                        if (value.GetType() == typeof(DateTime))
                        {
                            DateTime date = (DateTime)value;
                            _queryBuilder.Append(DataFormater.ParseToSQL(date.ToString("yyyy-MM-dd")));
                            return(node);
                        }
                    }
                    _queryBuilder.Append(DataFormater.ParseToSQL(value));
                }
            }
            return(node);
        }
Пример #7
0
 public string Find(object id)
 {
     if (string.IsNullOrEmpty(EntityMap.PrimaryKeyName))
     {
         throw new Exception("Entity [" + EntityMap.Type + "] without primary key mapped.");
     }
     return(EntityMap.Select + "WHERE _this." + EntityMap.PrimaryKeyName + " = " + DataFormater.ParseToSQL(id) + ";");
 }
Пример #8
0
 protected override Expression VisitMember(MemberExpression node)
 {
     if (node.Expression != null && node.Expression.NodeType == ExpressionType.Parameter)
     {
         var          type = node.Expression.Type;
         string       columnName;
         PropertyInfo property = type.GetProperty(node.Member.Name);
         if (property.PropertyType.Namespace.Equals("System") && !property.PropertyType.Namespace.Equals("System.Collections.Generic"))
         {
             ViewMap.ColumnNames.TryGetValue(node.Member.Name, out columnName);
             _queryBuilder.Append(columnName);
         }
         return(node);
     }
     if (node.Expression != null && node.Expression.NodeType == ExpressionType.MemberAccess)
     {
         this.Visit(node.Expression);
     }
     if (node.Expression != null && node.Expression.NodeType == ExpressionType.Constant)
     {
         ConstantExpression constantExpression = node.Expression as ConstantExpression;
         object             obj = constantExpression.Value;
         var c = obj.GetType().GetFields().Length;
         if (c > 1)
         {
             var       fields = obj.GetType().GetFields();
             FieldInfo field  = null;
             foreach (var f in fields)
             {
                 if (f.Name.Equals(node.Member.Name))
                 {
                     field = f;
                     break;
                 }
             }
             if (field != null)
             {
                 object value = field.GetValue(obj);
                 if (value != null)
                 {
                     if (value.GetType() == typeof(DateTime))
                     {
                         DateTime date = (DateTime)value;
                         value = DataFormater.ParseToSQL(date.ToString("yyyy-MM-dd"));
                         _queryBuilder.Append(value);
                     }
                     else
                     {
                         value = DataFormater.ParseToSQL(value);
                         _queryBuilder.Append(value);
                     }
                 }
                 else
                 {
                     value = DataFormater.ParseToSQL(value);
                     _queryBuilder.Append(value);
                 }
             }
         }
         else
         {
             FieldInfo field = obj.GetType().GetFields()[0];
             object    value = field.GetValue(obj);
             if (value != null)
             {
                 if (value.GetType() == typeof(DateTime))
                 {
                     DateTime date = (DateTime)value;
                     _queryBuilder.Append(DataFormater.ParseToSQL(date.ToString("yyyy-MM-dd")));
                     return(node);
                 }
             }
             _queryBuilder.Append(DataFormater.ParseToSQL(value));
         }
     }
     return(node);
 }