Exemplo n.º 1
0
        /// <summary>
        /// 新增Dto模型
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static string InsertDtoModel(this AttrBaseModel model)
        {
            StringBuilder sql    = new StringBuilder();
            StringBuilder values = new StringBuilder();

            object[] Mainobj = model.GetType().GetCustomAttributes(typeof(InsertTableAttribute), true);
            if (Mainobj == null || Mainobj.Length != 1)
            {
                throw new AttrSqlException("未定义新增表,请检查Dto特性配置!");
            }
            InsertTableAttribute mainTable = Mainobj[0] as InsertTableAttribute;

            sql.Append($"INSERT INTO {mainTable.GetInsertTableName()}");
            sql.Append("(");
            foreach (var prop in model.GetType().GetProperties())
            {
                if (prop.IsDefined(typeof(DbFiledMappingAttribute), true))
                {
                    DbFiledMappingAttribute dbFiledMappingAttribute = prop.GetCustomAttributes(typeof(DbFiledMappingAttribute), true)[0] as DbFiledMappingAttribute;
                    sql.Append($"`{dbFiledMappingAttribute.GetDbFieldName()}`,");
                    values.Append($"@{dbFiledMappingAttribute.GetDbFieldName()},");
                }
            }
            sql.Remove(sql.Length - 1, 1);
            sql.Append(")");
            sql.Append("VALUES");
            sql.Append("(");
            sql.Append($"{values.ToString()}");
            sql.Remove(sql.Length - 1, 1);
            sql.Append(")");
            return(sql.ToString());
        }
Exemplo n.º 2
0
        /// <summary>
        /// 根据Dto模型特性配置生成sql
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="IngnorIntDefault"></param>
        /// <returns></returns>
        public static string UpdateFieldByDtoAttribute <T>(this AttrBaseModel dto, bool IngnorIntDefault = true) where T : AttrBaseModel
        {
            StringBuilder UpdateField = new StringBuilder();
            StringBuilder WhereField  = new StringBuilder();

            object[] Mainobj = typeof(T).GetCustomAttributes(typeof(UpdateTableAttribute), true);
            if (Mainobj == null || Mainobj.Length != 1)
            {
                throw new AttrSqlException("未定义更新的表,请检查Dto特性配置!");
            }
            UpdateTableAttribute mainTable = Mainobj[0] as UpdateTableAttribute;

            UpdateField.Append($"Update {mainTable.GetUpdateTableName()} SET ");
            WhereField.Append($" Where 1=1 ");
            foreach (var prop in dto.GetType().GetProperties())
            {
                if (prop.IsDefined(typeof(DbFiledMappingAttribute), true))
                {
                    DbFiledMappingAttribute dbFiledMappingAttribute = prop.GetCustomAttributes(typeof(DbFiledMappingAttribute), true)[0] as DbFiledMappingAttribute;
                    bool isnull = false;
                    if (!dbFiledMappingAttribute.GetIsAllowEmpty())
                    {
                        //判断当前属性是否有值(主要针对string、int和数组类型)
                        object objvalue = prop.GetValue(dto, null);
                        if (objvalue == null)
                        {
                            continue;
                        }
                        if (objvalue is string && string.IsNullOrEmpty((string)objvalue))
                        {
                            isnull = true;
                        }
                        else if ((objvalue is int && (int)objvalue == 0) || (objvalue is long && (long)objvalue == 0) || (objvalue is byte && (byte)objvalue == 0))
                        {
                            if (IngnorIntDefault)
                            {
                                isnull = true;
                            }
                        }
                        else if (objvalue is DateTime && (DateTime)objvalue == default(DateTime))
                        {
                            isnull = true;
                        }
                        else if (objvalue is Array)
                        {
                            Array array = (Array)objvalue;
                            if (array == null || array.Length == 0)
                            {
                                isnull = true;
                            }
                        }
                    }
                    //对有值的进行操作
                    if (!isnull)
                    {
                        if (dbFiledMappingAttribute.GetIsCondition())
                        {
                            WhereField.Append($" And {dbFiledMappingAttribute.GetDbFieldName()}=@{prop.Name} ");
                        }
                        else
                        {
                            UpdateField.Append($" {dbFiledMappingAttribute.GetDbFieldName()}=@{prop.Name},");
                        }
                    }
                }
            }
            if (UpdateField.ToString() == $"Update {mainTable.GetUpdateTableName()} SET ")
            {
                throw new AttrSqlException("未定义更新字段,请检查Dto特性配置!");
            }
            else
            {
                UpdateField.Remove(UpdateField.Length - 1, 1);
            }
            if (WhereField.ToString() != $" Where 1=1 ")
            {
                UpdateField.Append(WhereField.ToString());
            }
            return(UpdateField.ToString());
        }