Пример #1
0
 internal string GetTableNameByClassType(string typeName)
 {
     if (_mappingTableList.IsValuable())
     {
         //Key为实体类 Value为表名
         if (_mappingTableList.Any(it => it.Key == typeName))
         {
             typeName = _mappingTableList.First(it => it.Key == typeName).Value;
         }
     }
     return(typeName);
 }
Пример #2
0
 private void InsertEvents(SysBest_Element insObj, int addressId, List <ElementEvent> formEvents, int elementId, string founder)
 {
     if (formEvents.IsValuable())
     {
         _db.Delete <SysBest_ElementEvent>(it => it.ElementId == elementId);
         List <SysBest_ElementEvent> insertEventList = new List <SysBest_ElementEvent>();
         foreach (var it in formEvents)
         {
             if (it.Value.IsNullOrEmpty())
             {
                 continue;
             }
             SysBest_ElementEvent data = new SysBest_ElementEvent()
             {
                 ElementId  = elementId,
                 Key        = it.Key,
                 Value      = it.Value,
                 LinkId     = addressId,
                 EventType  = it.EventType.TryToInt(),
                 Pars       = (it.Pars.TryToString()).ToUrlDecode().Replace("$^douhao^$", ","),
                 CreateTime = DateTime.Now,
                 Founder    = insObj.Founder,
                 Sort       = 0
             };
             insertEventList.Add(data);
         }
         _db.InsertRange(insertEventList, false);
     }
 }
Пример #3
0
 private void InsertAttrs(int addressId, List <ElementAttr> formAttrs, int elementId, string founder)
 {
     if (formAttrs.IsValuable())
     {
         _db.Delete <SysBest_ElementAttr>(it => it.ElementId == elementId);
         //插入属性
         List <SysBest_ElementAttr> insertAttrList = new List <SysBest_ElementAttr>();
         foreach (var it in formAttrs)
         {
             if (it.Value.IsNullOrEmpty())
             {
                 continue;
             }
             SysBest_ElementAttr data = new SysBest_ElementAttr()
             {
                 ElementId  = elementId,
                 Key        = it.Key,
                 Value      = it.Value,
                 LinkId     = addressId,
                 Sort       = 0,
                 CreateTime = DateTime.Now,
                 Founder    = "admin"
             };
             insertAttrList.Add(data);
         }
         _db.InsertRange(insertAttrList, false);
     }
 }
Пример #4
0
        /// <summary>
        /// 向用户发送邮件
        /// </summary>
        /// <param name="receive">接收邮件的用户</param>
        /// <param name="sendUser">发送者显求的邮箱地址,可为空</param>
        /// <param name="displayName">收件人显示发件人的联系人名,可为中文</param>
        /// <param name="sendUserName">发送者的邮箱登陆名,可以与发送者地址一样</param>
        /// <param name="userPassword">发送者的登陆密码</param>
        /// <param name="mailTitle">发送标题</param>
        /// <param name="mailContent">发送的内容</param>
        /// <param name="cc">抄送人</param>
        public static void SendMail(List <string> receive, string displayName, string sendUser, string sendUserName, string userPassword, string mailTitle, string mailContent, List <string> cc = null)
        {
            MailAddress fromMail = new MailAddress(sendUser, displayName);//发送者邮箱
            MailMessage mail     = new MailMessage()
            {
                From       = fromMail,
                Subject    = mailTitle,
                IsBodyHtml = true,//是否支持HTML
                Body       = mailContent
            };

            receive.ForEach(m => mail.To.Add(m));
            if (cc.IsValuable())
            {
                cc.ForEach(m => mail.CC.Add(m));
            }

            SmtpClient client = new SmtpClient
            {
                Host = "smtp.exmail.qq.com",//设置发送者邮箱对应的smtpserver
                UseDefaultCredentials = false,
                //Port = 465,
                Credentials    = new NetworkCredential(sendUserName, userPassword),
                DeliveryMethod = SmtpDeliveryMethod.Network
            };

            try
            {
                client.Send(mail);
            }
            catch (SmtpException ex)
            {
                throw new Exception("发送邮件信息异常", ex);
            }
        }
Пример #5
0
 /// <summary>
 /// 设置实体类与表名的映射, Key为实体类 Value为表名
 /// </summary>
 /// <param name="mappingTables"></param>
 public void SetMappingTables(List <KeyValue> mappingTables)
 {
     if (mappingTables.IsValuable())
     {
         _mappingTableList = mappingTables;
     }
 }
Пример #6
0
 /// <summary>
 /// 设置流水号 (说明:Dictionary<流水号名称, Func<{表名,字段名},返回的流水号>>)
 /// </summary>
 /// <param name="serNum"></param>
 public void SetSerialNumber(List <PubModel.SerialNumber> serNum)
 {
     if (serNum.IsValuable())
     {
         _serialNumber = serNum;
     }
 }
        /// <summary>
        /// 批量插入(说明:一次更新超过10条以上建议使用SqlBulkReplace)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="rowObjList">更新实体的集合,rowObj必需包含主键并且不能为匿名对象</param>
        /// <returns>执行成功将返回bool的集合</returns>
        public List <bool> UpdateRange <T>(List <T> rowObjList) where T : class
        {
            var reval = new List <bool>();

            if (rowObjList.IsValuable())
            {
                foreach (T item in rowObjList)
                {
                    reval.Add(Update <T>(item));
                }
            }
            return(reval);
        }
Пример #8
0
        public List <SysBest_DataApi> GetDataApiWithEleEventByEleId(List <SysBest_Element> eleList)
        {
            List <SysBest_DataApi> reval = new List <SysBest_DataApi>();

            if (eleList.IsValuable())
            {
                eleList.ForEach(it =>
                {
                    reval.AddRange(GetDataApiWithEleEventByEleId(it.Id));
                });
            }
            return(reval);
        }
Пример #9
0
        /// <summary>
        /// 根据DataTable获取实体类的字符串
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="className"></param>
        /// <returns></returns>
        public string DataTableToClass(DataTable dt, string className, string nameSpace = null, List <PubModel.DataTableMap> dataTableMapList = null)
        {
            StringBuilder reval           = new StringBuilder();
            StringBuilder propertiesValue = new StringBuilder();
            string        replaceGuid     = Guid.NewGuid().ToString();

            foreach (DataColumn r in dt.Columns)
            {
                propertiesValue.AppendLine();
                string typeName = ChangeType(r.DataType);
                bool   isAny    = false;
                PubModel.DataTableMap columnInfo = new PubModel.DataTableMap();
                if (dataTableMapList.IsValuable())
                {
                    isAny = dataTableMapList.Any(it => it.COLUMN_NAME.ToString() == r.ColumnName);
                    if (isAny)
                    {
                        columnInfo = dataTableMapList.First(it => it.COLUMN_NAME.ToString() == r.ColumnName);
                        propertiesValue.AppendFormat(@"     /// <summary>
     /// 说明:{0} 
     /// 默认:{1} 
     /// 可空:{2} 
     /// </summary>
",
                                                     columnInfo.COLUMN_DESCRIPTION.IsValuable() ? columnInfo.COLUMN_DESCRIPTION.ToString() : "-", //{0}
                                                     columnInfo.COLUMN_DEFAULT.IsValuable() ? columnInfo.COLUMN_DEFAULT.ToString() : "-",         //{1}
                                                     Convert.ToBoolean(columnInfo.IS_NULLABLE));                                                  //{2}
                    }
                }
                propertiesValue.AppendFormat("    public {0} {1} {2}", isAny ? ChangeNullable(typeName, Convert.ToBoolean(columnInfo.IS_NULLABLE)) : typeName, r.ColumnName, "{get;set;}");
                propertiesValue.AppendLine();
            }

            reval.AppendFormat(@"   public class {0}{{
                        {1}
   }}
            ", className, propertiesValue);

            if (nameSpace != null)
            {
                return(string.Format(@"using System;
namespace {1}
{{
 {0}
}}", reval.ToString(), nameSpace));
            }
            else
            {
                return(reval.ToString());
            }
        }
Пример #10
0
        /// <summary>
        /// 根据DataTable获取实体类的字符串
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="className"></param>
        /// <returns></returns>
        public string DataTableToClass(DataTable dt, string className, string nameSpace = null, List <PubModel.DataTableMap> dataTableMapList = null)
        {
            StringBuilder reval           = new StringBuilder();
            StringBuilder propertiesValue = new StringBuilder();
            string        replaceGuid     = Guid.NewGuid().ToString();

            var           template        = ClassTemplate.Template;
            string        _ns             = nameSpace;
            string        _foreach        = "";
            string        _className      = className;
            List <string> _primaryKeyName = new List <string>();

            foreach (DataColumn r in dt.Columns)
            {
                propertiesValue.AppendLine();
                string typeName = ChangeType(r.DataType);
                bool   isAny    = false;
                PubModel.DataTableMap columnInfo = new PubModel.DataTableMap();
                if (dataTableMapList.IsValuable())
                {
                    isAny = dataTableMapList.Any(it => it.COLUMN_NAME.ToString() == r.ColumnName);
                    if (isAny)
                    {
                        columnInfo = dataTableMapList.First(it => it.COLUMN_NAME.ToString() == r.ColumnName);
                        if (columnInfo.IS_PRIMARYKEY.ToString() == "1")
                        {
                            _primaryKeyName.Add(r.ColumnName);
                        }
                        propertiesValue.AppendFormat(@"     /// <summary>
     /// Desc:{0} 
     /// Default:{1} 
     /// Nullable:{2} 
     /// </summary>
",
                                                     columnInfo.COLUMN_DESCRIPTION.IsValuable() ? columnInfo.COLUMN_DESCRIPTION.ToString() : "-", //{0}
                                                     columnInfo.COLUMN_DEFAULT.IsValuable() ? columnInfo.COLUMN_DEFAULT.ToString() : "-",         //{1}
                                                     Convert.ToBoolean(columnInfo.IS_NULLABLE));                                                  //{2}
                    }
                }
                propertiesValue.AppendFormat(
                    ClassTemplate.ItemTemplate,
                    isAny ? ChangeNullable(typeName, Convert.ToBoolean(columnInfo.IS_NULLABLE)) : typeName,
                    r.ColumnName, "{get;set;}",
                    "");
                propertiesValue.AppendLine();
            }
            _foreach = propertiesValue.ToString();

            template = ClassTemplate.Replace(template, _ns, _foreach, _className, _primaryKeyName);
            return(template);
        }
Пример #11
0
        /// <summary>
        /// 将源数据对象转换到新对象中
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="queryable"></param>
        /// <param name="expression"></param>
        /// <returns></returns>
        public static Queryable <TResult> Select <TSource, TResult>(this Queryable <TSource> queryable, Expression <Func <TSource, TResult> > expression)
        {
            var type   = typeof(TSource);
            var expStr = expression.ToString();
            Queryable <TResult> reval = new Queryable <TResult>()
            {
                DB        = queryable.DB,
                OrderBy   = queryable.OrderBy,
                Params    = queryable.Params,
                Skip      = queryable.Skip,
                Take      = queryable.Take,
                Where     = queryable.Where,
                TableName = type.Name,
                GroupBy   = queryable.GroupBy,
                JoinTable = queryable.JoinTable
            };
            var selectStr = Regex.Match(expStr, @"(?<=\{).*?(?=\})").Value;
            var items     = selectStr.Split(',');
            var newItems  = new List <string>();

            if (selectStr.IsNullOrEmpty())
            {
                items = Regex.Match(expStr, @"c =>.*?\((.+)\)").Groups[1].Value.Split(',');
            }
            if (items.IsValuable())
            {
                foreach (var item in items)
                {
                    var itemArray = item.Trim().Split('=');
                    if (reval.JoinTable.IsValuable())
                    {
                        newItems.Add(itemArray.Last() + " AS " + itemArray.First());
                    }
                    else
                    {
                        newItems.Add(itemArray.Last().Split('.').Last() + " AS " + itemArray.First());
                    }
                }
            }
            reval.Select = "*";
            if (newItems.IsValuable())
            {
                reval.Select = string.Join(",", newItems);
            }
            return(reval);
        }
Пример #12
0
        /// <summary>
        ///  处理业务逻辑(只是示例就算看不懂,不合理也没关系,重要的是这儿是处理逻辑的)
        /// </summary>
        /// <param name="allTopic"></param>
        /// <returns></returns>
        internal List <List <V_dnt_test_topics> > ArrangeTopic(List <V_dnt_test_topics> allTopic)
        {
            var reval           = new List <List <V_dnt_test_topics> >();
            var groupTypeIdList = allTopic.GroupBy(it => it.fid).Select(it => it.Key).ToList();

            if (allTopic.IsValuable())
            {
                foreach (var typeId in groupTypeIdList)
                {
                    var addItem = allTopic.Where(it => it.fid == typeId).Take(4).ToList();//取四条
                    if (addItem.IsValuable())
                    {
                        reval.Add(addItem);
                    }
                }
            }
            return(reval);
        }
Пример #13
0
        internal string GetClassString(List <DbColumnInfo> columns, ref string className)
        {
            string classText       = this.ClassTemplate;
            string ConstructorText = IsDefaultValue ? this.ConstructorTemplate : null;

            classText = classText.Replace(DbFirstTemplate.KeyClassName, className);
            classText = classText.Replace(DbFirstTemplate.KeyNamespace, this.Namespace);
            classText = classText.Replace(DbFirstTemplate.KeyUsing, IsAttribute ? (this.UsingTemplate + "using " + UtilConstants.AssemblyName + ";\r\n") : this.UsingTemplate);
            classText = classText.Replace(DbFirstTemplate.KeyClassDescription, this.ClassDescriptionTemplate.Replace(DbFirstTemplate.KeyClassDescription, "\r\n"));
            classText = classText.Replace(DbFirstTemplate.KeySugarTable, IsAttribute ? string.Format(DbFirstTemplate.ValueSugarTable, className) : null);
            if (columns.IsValuable())
            {
                foreach (var item in columns)
                {
                    var    isLast                  = columns.Last() == item;
                    var    index                   = columns.IndexOf(item);
                    string PropertyText            = this.PropertyTemplate;
                    string PropertyDescriptionText = this.PropertyDescriptionTemplate;
                    string propertyName            = GetPropertyName(item);
                    string propertyTypeName        = item.PropertyName;
                    PropertyText            = GetPropertyText(item, PropertyText);
                    PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText);
                    PropertyText            = PropertyDescriptionText + PropertyText;
                    classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName)));
                    if (ConstructorText.IsValuable() && item.DefaultValue != null)
                    {
                        var hasDefaultValue = columns.Skip(index + 1).Any(it => it.DefaultValue.IsValuable());
                        ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyPropertyName, propertyName);
                        ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyDefaultValue, GetPropertyTypeConvert(item)) + (!hasDefaultValue ? "" : this.ConstructorTemplate);
                    }
                }
            }
            if (!columns.Any(it => it.DefaultValue != null))
            {
                ConstructorText = null;
            }
            classText = classText.Replace(DbFirstTemplate.KeyConstructor, ConstructorText);
            classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null);
            return(classText);
        }
Пример #14
0
        public override bool CreateTable(string tableName, List <DbColumnInfo> columns)
        {
            if (columns.IsValuable())
            {
                foreach (var item in columns)
                {
                    if (item.DbColumnName.Equals("GUID", StringComparison.CurrentCultureIgnoreCase))
                    {
                        item.Length = 20;
                    }
                    if (item.IsIdentity && !item.IsPrimarykey)
                    {
                        item.IsPrimarykey = true;
                        Check.Exception(item.DataType == "integer", "Identity only integer type");
                    }
                }
            }
            string sql = GetCreateTableSql(tableName, columns);

            this.Context.Ado.ExecuteCommand(sql);
            return(true);
        }
Пример #15
0
        public override bool CreateTable(string tableName, List <DbColumnInfo> columns)
        {
            if (columns.IsValuable())
            {
                foreach (var item in columns)
                {
                    if (item.DbColumnName.Equals("GUID", StringComparison.CurrentCultureIgnoreCase) && item.Length == 0)
                    {
                        item.Length = 36;
                    }
                }
            }
            string sql            = GetCreateTableSql(tableName, columns);
            string primaryKeyInfo = null;

            if (columns.Any(it => it.IsIdentity))
            {
                primaryKeyInfo = string.Format(", Primary key({0})", string.Join(",", columns.Where(it => it.IsIdentity).Select(it => this.SqlBuilder.GetTranslationColumnName(it.DbColumnName))));
            }
            sql = sql.Replace("$PrimaryKey", primaryKeyInfo);
            this.Context.Ado.ExecuteCommand(sql);
            return(true);
        }
Пример #16
0
        /// <summary>
        /// 匹配类型
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public string ChangeType(Type type, List <PubModel.DataTableMap> list)
        {
            var    om       = OracleConfig.OracleNumberTypeMapping;
            string typeName = type.Name;

            if (list.IsValuable() && list.Single().DATA_TYPE.ToString().ToLower() == "number")
            {
                var map = list.Single();
                switch (map.DATA_SCALE.ObjToInt())
                {
                case 0:
                    if (om.ContainsKey(map.DATA_PRECISION.ObjToInt()))
                    {
                        typeName = om[map.DATA_PRECISION.ObjToInt()];
                    }
                    else
                    {
                        typeName = "int";
                    }
                    break;

                case 2:
                    typeName = "double";
                    break;

                default:
                    break;
                }
            }
            switch (typeName)
            {
            case "Int32": typeName = "int"; break;

            case "String": typeName = "string"; break;
            }
            return(typeName);
        }
Пример #17
0
        /// <summary>
        ///遍历表名和视图名
        /// </summary>
        /// <param name="db"></param>
        /// <param name="action">string为表名</param>
        public void ForeachTables(SqlSugarClient db, Action <string> action)
        {
            Check.ArgumentNullException(action, "ForeachTables.action不能为null。");
            string cacgeKey = "ClassGenerating.ForeachTables";
            var    cm       = CacheManager <List <string> > .GetInstance();

            List <string> tables = null;

            if (cm.ContainsKey(cacgeKey))
            {
                tables = cm[cacgeKey];
            }
            else
            {
                tables = GetTableNames(db);
            }
            if (tables.IsValuable())
            {
                foreach (var item in tables)
                {
                    action(item);
                }
            }
        }
Пример #18
0
        /// <summary>
        /// 根据DataTable获取实体类的字符串
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="className"></param>
        /// <param name="nameSpace"></param>
        /// <param name="dataTableMapList"></param>
        /// <returns></returns>
        public string DataTableToClass(DataTable dt, string className, string nameSpace = null, List<PubModel.DataTableMap> dataTableMapList = null)
        {
            StringBuilder reval = new StringBuilder();
            StringBuilder propertiesValue = new StringBuilder();
            string replaceGuid = Guid.NewGuid().ToString();

            var template = ClassTemplate.Template;
            string _ns = nameSpace;
            string _foreach = "";
            string _className = className;
            List<string> _primaryKeyName = new List<string>();
            foreach (DataColumn r in dt.Columns)
            {
                propertiesValue.AppendLine();
                string typeName = ChangeType(r.DataType);
                bool isAny = false;
                PubModel.DataTableMap columnInfo = new PubModel.DataTableMap();
                if (dataTableMapList.IsValuable())
                {
                    isAny = dataTableMapList.Any(it => it.COLUMN_NAME.ToString() == r.ColumnName);
                    if (isAny)
                    {
                        columnInfo = dataTableMapList.First(it => it.COLUMN_NAME.ToString() == r.ColumnName);
                        if (columnInfo.IS_PRIMARYKEY.ToString() == "1")
                        {
                            _primaryKeyName.Add(r.ColumnName);
                        }
                        propertiesValue.AppendFormat(ClassTemplate.ClassFieldSummaryTemplate,
                        columnInfo.COLUMN_DESCRIPTION.IsValuable() ? columnInfo.COLUMN_DESCRIPTION.ToString() : "-", //{0}
                        columnInfo.COLUMN_DEFAULT.IsValuable() ? columnInfo.COLUMN_DEFAULT.ToString() : "-", //{1}
                        Convert.ToBoolean(columnInfo.IS_NULLABLE));//{2}
                    }
                }
                propertiesValue.AppendFormat(
                    ClassTemplate.ItemTemplate,
                    isAny ? ChangeNullable(typeName, Convert.ToBoolean(columnInfo.IS_NULLABLE)) : typeName,
                    r.ColumnName, "{get;set;}",
                    "");
                propertiesValue.AppendLine();
            }
            _foreach = propertiesValue.ToString();

            template = ClassTemplate.Replace(template, _ns, _foreach, _className, _primaryKeyName);
            return template;
        }
Пример #19
0
        /// <summary>
        /// 插入
        /// 使用说明:sqlSugar.Insert(entity);
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity">插入对象</param>
        /// <param name="isIdentity">该属性已经作废可以不填,主键是否为自增长,true可以不填,false必填</param>
        /// <returns></returns>
        public object Insert <T>(T entity, bool isIdentity = true) where T : class
        {
            Type   type     = entity.GetType();
            string typeName = type.Name;

            typeName = GetTableNameByClassType(typeName);

            StringBuilder         sbInsertSql = new StringBuilder();
            List <MySqlParameter> pars        = new List <MySqlParameter>();
            var identities = SqlSugarTool.GetIdentitiesKeyByTableName(this, typeName);

            isIdentity = identities != null && identities.Count > 0;
            //sql语句缓存
            string cacheSqlKey     = "db.Insert." + typeName;
            var    cacheSqlManager = CacheManager <StringBuilder> .GetInstance();

            //属性缓存
            string cachePropertiesKey     = "db." + typeName + ".GetProperties";
            var    cachePropertiesManager = CacheManager <PropertyInfo[]> .GetInstance();

            PropertyInfo[] props = null;
            if (cachePropertiesManager.ContainsKey(cachePropertiesKey))
            {
                props = cachePropertiesManager[cachePropertiesKey];
            }
            else
            {
                props = type.GetProperties();
                cachePropertiesManager.Add(cachePropertiesKey, props, cachePropertiesManager.Day);
            }
            var isContainCacheSqlKey = cacheSqlManager.ContainsKey(cacheSqlKey);

            if (isContainCacheSqlKey)
            {
                sbInsertSql = cacheSqlManager[cacheSqlKey];
            }
            else
            {
                //2.获得实体的属性集合


                //实例化一个StringBuilder做字符串的拼接


                sbInsertSql.Append("insert into " + typeName + " (");

                //3.遍历实体的属性集合
                foreach (PropertyInfo prop in props)
                {
                    //EntityState,@EntityKey
                    if (!isIdentity || identities.Any(it => it.Value.ToLower() != prop.Name.ToLower()))
                    {
                        //4.将属性的名字加入到字符串中
                        sbInsertSql.Append("`" + prop.Name + "`,");
                    }
                }
                //**去掉最后一个逗号
                sbInsertSql.Remove(sbInsertSql.Length - 1, 1);
                sbInsertSql.Append(" ) values(");
            }

            //5.再次遍历,形成参数列表"(@xx,@xx@xx)"的形式
            foreach (PropertyInfo prop in props)
            {
                //EntityState,@EntityKey
                if (!isIdentity || identities.Any(it => it.Value.ToLower() != prop.Name.ToLower()))
                {
                    if (!cacheSqlManager.ContainsKey(cacheSqlKey))
                    {
                        sbInsertSql.Append("@" + prop.Name + ",");
                    }
                    object val = prop.GetValue(entity, null);
                    if (val == null)
                    {
                        val = DBNull.Value;
                    }
                    if (_serialNumber.IsValuable())
                    {
                        Func <PubModel.SerialNumber, bool> serEexp = it => it.TableName.ToLower() == typeName.ToLower() && it.FieldName.ToLower() == prop.Name.ToLower();
                        var isAnyNum = _serialNumber.Any(serEexp);
                        if (isAnyNum && (val == DBNull.Value || val.IsNullOrEmpty()))
                        {
                            val = _serialNumber.First(serEexp).GetNumFunc();
                        }
                    }

                    if (prop.PropertyType.IsEnum)
                    {
                        val = (int)(val);
                    }

                    var par = new MySqlParameter("@" + prop.Name, val);
                    pars.Add(par);
                }
            }
            if (!isContainCacheSqlKey)
            {
                //**去掉最后一个逗号
                sbInsertSql.Remove(sbInsertSql.Length - 1, 1);
                if (isIdentity == false)
                {
                    sbInsertSql.Append(");select 'true';");
                }
                else
                {
                    sbInsertSql.Append(");select @@identity;");
                }
                cacheSqlManager.Add(cacheSqlKey, sbInsertSql, cacheSqlManager.Day);
            }
            var sql = sbInsertSql.ToString();

            try
            {
                var lastInsertRowId = GetScalar(sql, pars.ToArray());
                return(lastInsertRowId);
            }
            catch (Exception ex)
            {
                var cacheManager = CacheManager <string> .GetInstance();

                cacheManager.RemoveAll(it => it.Contains("KeyBy"));
                throw new Exception("sql:" + sql + "\n" + ex.Message);
            }
        }
Пример #20
0
        /// <summary>
        /// 插入
        /// 使用说明:sqlSugar.Insert(entity);
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity">插入对象</param>
        /// <param name="isIdentity">该属性已经作废可以不填,主键是否为自增长,true可以不填,false必填</param>
        /// <returns></returns>
        public object Insert <T>(T entity, bool isIdentity = true) where T : class
        {
            Type   type     = entity.GetType();
            string typeName = type.Name;

            typeName = GetTableNameByClassType(typeName);
            var seqMap = OracleConfig.SequenceMapping;

            StringBuilder          sbInsertSql = new StringBuilder();
            List <OracleParameter> pars        = new List <OracleParameter>();
            var identities = SqlSugarTool.GetIdentitiesKeyByTableName(this, typeName);

            isIdentity = identities != null && identities.Where(it => it.Key.ToLower() == typeName.ToLower()).Count() > 0;
            //sql语句缓存
            string cacheSqlKey     = "db.Insert." + type.FullName;
            var    cacheSqlManager = CacheManager <StringBuilder> .GetInstance();

            //属性缓存
            string cachePropertiesKey     = "db." + type.FullName + ".GetProperties";
            var    cachePropertiesManager = CacheManager <PropertyInfo[]> .GetInstance();

            PropertyInfo[] props = null;
            if (cachePropertiesManager.ContainsKey(cachePropertiesKey))
            {
                props = cachePropertiesManager[cachePropertiesKey];
            }
            else
            {
                props = type.GetProperties();
                cachePropertiesManager.Add(cachePropertiesKey, props, cachePropertiesManager.Day);
            }
            var isContainCacheSqlKey = cacheSqlManager.ContainsKey(cacheSqlKey);

            if (isContainCacheSqlKey)
            {
                sbInsertSql = cacheSqlManager[cacheSqlKey];
            }
            else
            {
                //2.获得实体的属性集合


                //实例化一个StringBuilder做字符串的拼接


                sbInsertSql.Append("insert into " + typeName + " (");

                //3.遍历实体的属性集合
                foreach (PropertyInfo prop in props)
                {
                    if (this.IsIgnoreErrorColumns)
                    {
                        if (!SqlSugarTool.GetColumnsByTableName(this, typeName).Any(it => it.ToLower() == prop.Name.ToLower()))
                        {
                            continue;
                        }
                    }
                    //4.将属性的名字加入到字符串中
                    sbInsertSql.Append("" + prop.Name + ",");
                }
                //**去掉最后一个逗号
                sbInsertSql.Remove(sbInsertSql.Length - 1, 1);
                sbInsertSql.Append(" ) values(");
            }

            //5.再次遍历,形成参数列表"(@xx,@xx@xx)"的形式
            foreach (PropertyInfo prop in props)
            {
                //EntityState,@EntityKey
                if (!isIdentity || identities.Any(it => it.Value.ToLower() != prop.Name.ToLower()))
                {
                    if (this.IsIgnoreErrorColumns)
                    {
                        if (!SqlSugarTool.GetColumnsByTableName(this, typeName).Any(it => it.ToLower() == prop.Name.ToLower()))
                        {
                            continue;
                        }
                    }
                    if (!cacheSqlManager.ContainsKey(cacheSqlKey))
                    {
                        sbInsertSql.Append(":" + prop.Name + ",");
                    }
                    object val = prop.GetValue(entity, null);
                    if (val == null)
                    {
                        val = DBNull.Value;
                    }
                    if (_serialNumber.IsValuable())
                    {
                        Func <PubModel.SerialNumber, bool> serEexp = it => it.TableName.ToLower() == typeName.ToLower() && it.FieldName.ToLower() == prop.Name.ToLower();
                        var isAnyNum = _serialNumber.Any(serEexp);
                        if (isAnyNum && (val == DBNull.Value || val.IsNullOrEmpty()))
                        {
                            if (_serialNumber.First(serEexp).GetNumFunc != null)
                            {
                                val = _serialNumber.First(serEexp).GetNumFunc();
                            }
                            if (_serialNumber.First(serEexp).GetNumFuncWithDb != null)
                            {
                                val = _serialNumber.First(serEexp).GetNumFuncWithDb(this);
                            }
                        }
                    }

                    if (prop.PropertyType.IsEnum)
                    {
                        val = (int)(val);
                    }

                    var par = new OracleParameter(":" + prop.Name, val.ToOracleParValue());
                    OracleConfig.SetParType(typeName, prop, par, this);
                    SqlSugarTool.SetParSize(par);
                    pars.Add(par);
                }
                else
                {
                    if (!cacheSqlManager.ContainsKey(cacheSqlKey))
                    {
                        var seqList = seqMap.Where(it => it.TableName.ToLower() == typeName.ToLower() && it.ColumnName.ToLower() == prop.Name.ToLower());
                        if (seqList.Any())
                        {
                            var seqName = seqList.First().Value;
                            sbInsertSql.Append(seqName + ".Nextval,");
                        }
                        else
                        {
                            sbInsertSql.Append("null,");
                        }
                    }
                }
            }
            if (!isContainCacheSqlKey)
            {
                //**去掉最后一个逗号
                sbInsertSql.Remove(sbInsertSql.Length - 1, 1);
                sbInsertSql.Append(")");

                cacheSqlManager.Add(cacheSqlKey, sbInsertSql, cacheSqlManager.Day);
            }
            var sql = sbInsertSql.ToString();

            try
            {
                var lastInsertRowId = ExecuteCommand(sql, pars.ToArray());
                if (lastInsertRowId > 0)
                {
                    if (isIdentity)
                    {
                        var seqName = seqMap.First(it => it.TableName.ToLower() == typeName.ToLower()).Value;
                        var eqValue = GetInt("SELECT " + seqName + ".currval from dual");
                        lastInsertRowId = eqValue;
                    }
                    else
                    {
                        lastInsertRowId = 1;
                    }
                }
                return(lastInsertRowId);
            }
            catch (Exception ex)
            {
                throw new Exception("sql:" + sql + "\n" + ex.Message);
            }
        }
Пример #21
0
        /// <summary>
        /// 设置在线信息
        /// </summary>
        /// <param name="_userInfo"></param>
        private void SetOnlineVisitors(UserInfo _userInfo)
        {
            var timeOut = DateTime.Now.AddMinutes(-PubConst.SiteOnlineTimeOut);
            List <OnlineVisitorsResult> onlineList = null;
            var key = PubConst.SessionOnline;
            var cm  = CacheManager <List <OnlineVisitorsResult> > .GetInstance();

            if (cm.ContainsKey(key))
            {
                onlineList = cm[key];
                if (onlineList.IsValuable())
                {
                    //过滤超时用户
                    onlineList = onlineList.Where(it => it.LastActionTime > timeOut).ToList();
                }
            }
            if (onlineList == null || onlineList.Count == 0)
            {
                onlineList = new List <OnlineVisitorsResult>();
            }
            var ip = RequestInfo.UserAddress;
            OnlineVisitorsResult o = new OnlineVisitorsResult();

            o.User = new UserInfo();
            if (_userInfo != null && _userInfo.Id > 0)
            {
                var oItem = onlineList.FirstOrDefault(it => it.User.Id == _userInfo.Id);
                if (oItem != null)
                {
                    oItem.LastActionTime = DateTime.Now;
                    oItem.LastActionIp   = ip;
                }
                else
                {
                    o.User           = _userInfo;
                    o.LastActionIp   = ip;
                    o.LastActionTime = DateTime.Now;
                    onlineList.Add(o);
                }
            }
            else
            {
                var oItem = onlineList.FirstOrDefault(it => it.LastActionIp == ip);
                if (oItem != null)
                {
                    oItem.LastActionTime = DateTime.Now;
                    oItem.LastActionIp   = ip;
                }
                else
                {
                    o.User = new UserInfo()
                    {
                        RoleId = PubEnum.RoleType.Tourist.TryToInt()
                    };
                    o.LastActionIp   = ip;
                    o.LastActionTime = DateTime.Now;
                    onlineList.Add(o);
                }
            }
            cm.Add(key, onlineList, cm.Day);
            ViewBag.OnlineVisitorsResult = onlineList;
        }
Пример #22
0
 /// <summary>
 /// 设置类名和表名的映射  key 为类名  value 为表名
 /// </summary>
 /// <param name="mappingTables"></param>
 public void SetMappingTables(List<KeyValuePair> mappingTables)
 {
     if (mappingTables.IsValuable())
     {
         _mappingTableList = mappingTables;
     }
 }
Пример #23
0
        protected void Page_Load(object sender, EventArgs e)
        {
            /***扩展函数名细***/

            //【IsInRange】
            int num = 100;

            //以前写法
            if (num > 100 & num < 1000)
            {
            }
            //现在写法
            if (num.IsInRange(100, 1000))
            {
            }                                 //datetime类型也支持



            //【IsNullOrEmpty】
            object s = "";

            //以前写法
            if (s == null || string.IsNullOrEmpty(s.ToString()))
            {
            }
            //现在写法
            if (s.IsNullOrEmpty())
            {
            }
            //更顺手了没有 }


            //【IsIn】
            string value = "a";

            //以前写法我在很多项目中看到
            if (value == "a" || value == "b" || value == "c")
            {
            }
            //现在写法
            if (value.IsIn("a", "b", "c"))
            {
            }
            //【IsContainsIn】
            //以前写法
            if ("abcd".Contains("abc") || "abcd".Contains("xxx"))
            {
            }
            //现在写法
            if ("abcd".IsContainsIn("abc", "xxx"))
            {
            }

            //【IsValuable与IsNullOrEmpty相反】
            string ss = "";

            //以前写法
            if (!string.IsNullOrEmpty(ss))
            {
            }
            //现在写法
            if (s.IsValuable())
            {
            }


            List <string> list = null;

            //以前写法
            if (list != null && list.Count > 0)
            {
            }
            //现在写法
            if (list.IsValuable())
            {
            }



            //IsIDcard
            if ("32061119810104311x".IsIDcard())
            {
            }

            //IsTelephone
            if ("0513-85669884".IsTelephone())
            {
            }

            //IsMatch 节约你引用Regex的命名空间了
            if ("我中国人12".IsMatch(@"人\d{2}"))
            {
            }


            //下面还有很多太简单了的就不介绍了
            //IsZero
            //IsInt
            //IsNoInt
            //IsMoney
            //IsEamil
            //IsMobile
        }