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); }
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); }
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); }
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); }
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; } }
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); }
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) + ";"); }
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); }