예제 #1
0
파일: SRO.cs 프로젝트: winal/Scree
        internal void Bestrow()
        {
            if (OriginalValue != null && OriginalValue.Count > 0)
            {
                return;
            }

            try
            {
                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(this.GetType());
                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsLoad == false && property.IsSave == false)
                    {//判断是否加载
                        continue;
                    }
                    object value = property.GetValue(this);
                    OriginalValue[property.Name] = value;
                }
            }
            catch (Exception ex)
            {
                LogProxy.Error(ex, false);
            }
        }
예제 #2
0
            private static string InsertSqlBuilder(Type type)
            {
                StringBuilder sql    = new StringBuilder("INSERT INTO [{0}] (");
                StringBuilder values = new StringBuilder();

                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(type);
                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsSave == false)
                    {//判断是否保存
                        continue;
                    }

                    sql.Append("[");
                    sql.Append(property.Name);
                    sql.Append("],");

                    values.Append("@");
                    values.Append(property.Name);
                    values.Append(",");
                }

                sql.Remove(sql.Length - 1, 1);
                values.Remove(values.Length - 1, 1);

                sql.Append(") VALUES (");
                sql.Append(values);
                sql.Append(") ");

                return(sql.ToString());
            }
예제 #3
0
파일: SRO.cs 프로젝트: winal/Scree
        internal void Reset()
        {
            if (OriginalValue == null || OriginalValue.Count == 0)
            {
                return;
            }

            try
            {
                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(this.GetType());
                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsLoad == false)
                    {//判断是否加载
                        continue;
                    }

                    object value = OriginalValue.ContainsKey(property.Name) ? OriginalValue[property.Name] : null;

                    property.SetValue(this, value);
                }
            }
            catch (Exception ex)
            {
                LogProxy.Error(ex, false);
            }
        }
예제 #4
0
            public static string UpdateBuilder(SRO obj, out IMyDbParameter[] prams)
            {
                List <IMyDbParameter> pramList = new List <IMyDbParameter>();
                Type type = obj.GetType();

                StringBuilder sql = new StringBuilder("UPDATE [{0}] SET ");

                bool isModified = false;

                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(obj.GetType());
                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsSave == false || property.Name == "CreatedDate" || property.Name == "Version")
                    {//判断是否保存
                        continue;
                    }

                    object pValue = property.GetValue(obj);
                    if (property.Name == "Id" || property.Name == "LastAlterDate")
                    {
                        pramList.Add(ParameterBuilder(property, pValue));
                        continue;
                    }

                    if (property.PropertyType == typeof(DateTime) && (DateTime)pValue == DateTime.MinValue && obj.GetOriginalValue(property.Name) == null)
                    {
                        continue;
                    }
                    else if (object.Equals(obj.GetOriginalValue(property.Name), pValue))
                    {
                        continue;
                    }

                    if (!isModified)
                    {
                        isModified = true;
                    }

                    sql.Append("[");
                    sql.Append(property.Name);
                    sql.Append("]=@");
                    sql.Append(property.Name);
                    sql.Append(",");

                    pramList.Add(ParameterBuilder(property, pValue));
                }

                if (isModified == false)
                {
                    prams = null;
                    return(null);
                }

                prams = pramList.ToArray();
                sql.Append(string.Format("[LastAlterDate]=@LastAlterDate,[Version]={0} WHERE [Id]=@Id AND [Version]={1}",
                                         ++obj.Version, (long)obj.GetOriginalValue("Version")));

                return(sql.ToString());
            }
예제 #5
0
            public static string UpdateBuilder(SRO obj, out IMyDbParameter[] prams)
            {
                List <IMyDbParameter> pramList = new List <IMyDbParameter>();
                Type type = obj.GetType();

                StringBuilder sql = new StringBuilder("UPDATE [{0}] SET ");

                bool isModified = false;

                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(obj.GetType());
                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsSave == false || property.Name == "CreatedDate" || property.Name == "LastAlterDate")
                    {//判断是否保存
                        continue;
                    }

                    object pValue = property.GetValue(obj);
                    if (property.Name == "Id")
                    {
                        pramList.Add(ParameterBuilder(property, pValue));
                        continue;
                    }

                    if (object.Equals(obj.GetOriginalValue(property.Name), pValue))
                    {
                        continue;
                    }

                    isModified = true;

                    sql.Append("[");
                    sql.Append(property.Name);
                    sql.Append("]=@");
                    sql.Append(property.Name);
                    sql.Append(",");

                    pramList.Add(ParameterBuilder(property, pValue));
                }

                if (isModified == false)
                {
                    prams = null;
                    return(null);
                }

                prams = pramList.ToArray();
                sql.Append(string.Format("[LastAlterDate]='{0}' WHERE [Id]=@Id", obj.LastAlterDate));

                return(sql.ToString());
            }
예제 #6
0
        private T LoadObject <T>(IDataReader dataReader) where T : SRO, new()
        {
            T    obj  = CreateObject <T>();
            Type type = typeof(T);

            IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(type);
            foreach (IMyPropertyInfo property in myPropertys)
            {
                if (property.IsLoad == false && property.IsSave == false)
                {//判断是否加载
                    continue;
                }

                object value = dataReader[property.Name];

                if (value == DBNull.Value)
                {
                    continue;
                }

                if (property.IsLoad)
                {
                    property.SetValue(obj, value);
                }

                if (property.PropertyType.IsEnum)
                {
                    obj.SetOriginalValue(property.Name, Enum.Parse(property.PropertyType, value.ToString()));
                }
                else
                {
                    obj.SetOriginalValue(property.Name, value);
                }
            }

            IMyPropertyInfo isNew = PropertyInfoProxy.GetProperty(type, "IsNew");

            isNew.SetValue(obj, false);

            AddCache(obj);

            return(obj);
        }
예제 #7
0
        private static SRO LoadObject(Type type, IDataReader dataReader)
        {
            SRO obj = CreateObject(type) as SRO;

            if (obj == null)
            {
                return(null);
            }

            IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(type);
            foreach (IMyPropertyInfo property in myPropertys)
            {
                if (property.IsLoad == false)
                {//判断是否加载
                    continue;
                }

                object value = dataReader[property.Name];

                if (value == DBNull.Value)
                {
                    continue;
                }

                property.SetValue(obj, value);
                obj.SetOriginalValue(property.Name, property.GetValue(obj));
            }

            IMyPropertyInfo isNew = PropertyInfoProxy.GetProperty(type, "IsNew");

            isNew.SetValue(obj, false);


            AddCache(obj);

            return(obj);
        }
예제 #8
0
            private static IMyDbParameter[] InsertParametersBuilder(SRO obj)
            {
                List <IMyDbParameter> prams = new List <IMyDbParameter>();

                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(obj.GetType());

                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsSave == false)
                    {//判断是否保存
                        continue;
                    }

                    object pValue = property.GetValue(obj);
                    if (pValue == null)
                    {
                        pValue = DBNull.Value;
                    }

                    prams.Add(ParameterBuilder(property, pValue));
                }

                return(prams.ToArray());
            }