Пример #1
0
        /// <summary>
        /// 获取加密码
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static string GetSecretCode(this ISecretCode entity)
        {
            Type etype = entity.GetType();

            PropertyInfo[] props = etype.GetProperties();

            List <string> strList = new List <string>();

            //遍历实体属性进行赋值
            foreach (PropertyInfo pi in props)
            {
                var fieldName = pi.Name;
                if (fieldName == "SecretCode")
                {
                    continue;
                }
                string str = fieldName;
                //非值类型,跳过
                if (!ObjectExtession.IsValueType(pi.PropertyType))
                {
                    continue;
                }
                var piValue = pi.GetValue(entity);
                if (piValue == null)
                {
                    continue;
                }
                else
                {
                    str += "=" + piValue;
                }
                strList.Add(str);
            }
            return(string.Join("&", strList).GetMd5());
        }
Пример #2
0
        /// <summary>
        /// 获取第一行数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="db"></param>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static T SqlQueryFirst <T>(this DbContext db, string sql, params DbParameter[] parameters)
        //where T : class,new()
        {
            var conn = db.Database.GetDbConnection();

            try
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                using (var reader = PreCommandReader(db.Database, sql, parameters))
                {
                    T   model  = Activator.CreateInstance <T>();
                    var type   = typeof(T);
                    var propts = type.GetProperties();
                    if (reader.Read())
                    {
                        if (ObjectExtession.IsValueType(type))//增加对可空类型和string datetime兼容
                        {
                            return((T)ObjectExtession.DbChangeType(reader[0], type));
                        }
                        else
                        {
                            foreach (var propt in propts)
                            {
                                object value = reader[propt.Name];
                                propt.SetValue(model, value == DBNull.Value ? null : value);
                            }
                        }
                    }
                    else
                    {
                        throw new Exception("SqlQueryFirst未读取到任何数据");
                    }

                    return(model);
                }
            }
            finally
            {
                conn.Close();
            }
        }
Пример #3
0
        /// <summary>
        ///  对比两个实体不同部分并赋值(排除主键、创建时间和创建人)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity">被赋值实体</param>
        /// <param name="data">提供更新值的实体(可以与被赋值实体类型相同或不同)</param>
        public void CompareValueAndassign <T>(TEntity entity, T data)
        {
            var  entityEntry = Context.Entry(entity);
            Type etype       = entity.GetType();

            PropertyInfo[] eprops = etype.GetProperties();

            Type dtype = data.GetType();

            PropertyInfo[] dprops = dtype.GetProperties();
            //遍历实体属性进行赋值
            foreach (PropertyInfo pi in eprops)
            {
                var fieldName = pi.Name;
                if (fieldName == "Createdtime" || fieldName == "CreatedEmp" || fieldName == "UpdatedEmp" || fieldName == "Updatedtime")
                {
                    continue;
                }
                //不在新数据中
                var dpi = FindPropertyInfo(dprops, fieldName);
                if (dpi == null)
                {
                    continue;
                }
                //忽略主键
                var fieldProp = entityEntry.Property(fieldName);
                if (fieldProp != null && fieldProp.Metadata.IsPrimaryKey())
                {
                    continue;
                }

                //非值类型,跳过
                if (!ObjectExtession.IsValueType(pi.PropertyType))
                {
                    continue;
                }

                //todo 这里可以自己定义一个Attribute 更专门 需要忽略掉的属性
                if (Attribute.IsDefined(pi.PropertyType, typeof(DescriptionAttribute)))
                {
                    continue;
                }

                var piValue = pi.GetValue(entity);

                var dpiValue = dpi.GetValue(data);


                if (piValue == null || dpiValue == null)
                {
                    if (piValue == null && dpiValue == null)
                    {
                        continue;
                    }
                }
                else
                {
                    //判断值是否相等 Equals是字符串类型的比较方法,所以基本类型全部转换成字符串比较,null值ToString会报错,要使用他内部的方法。
                    if (piValue.Equals(dpiValue))
                    {
                        continue;
                    }
                }

                //属性修改
                SetFieldValue(entity, fieldName, dpiValue);
            }
        }