Пример #1
0
        void IEditableObject.CancelEdit()
        {
            CopyFrom(_bak, false);

            _bak = null;
        }
Пример #2
0
 void IEditableObject.BeginEdit()
 {
     _bak = Clone() as EntityBase;
 }
Пример #3
0
        private void SetValue(IEntity entity, String name, Type type, Object value)
        {
            // 注意:name并不一定是实体类的成员,随便读取原数据可能会造成不必要的麻烦
            Object oldValue = null;

            if (type != null)
            {
                // 仅对精确匹配的字段进行读取旧值
                oldValue = entity[name];
            }
            //else
            //{
            //    type = value?.GetType();
            //    // 如果扩展数据里面有该字段也读取旧值
            //    if (entity.Extends.TryGetValue(name, out var v)) oldValue = v;
            //}

            // 不处理相同数据的赋值
            if (Equals(value, oldValue))
            {
                return;
            }

            if (type == typeof(String))
            {
                // 不处理空字符串对空字符串的赋值
                if (value != null && String.IsNullOrEmpty(value.ToString()))
                {
                    if (oldValue == null || String.IsNullOrEmpty(oldValue.ToString()))
                    {
                        return;
                    }
                }
            }
            else if (type == typeof(Boolean))
            {
                // 处理字符串转为布尔型
                if (value != null && value.GetType() == typeof(String))
                {
                    var vs = value.ToString();
                    if (String.IsNullOrEmpty(vs))
                    {
                        value = false;
                    }
                    else
                    {
                        if (Array.IndexOf(TrueString, vs.ToLower()) >= 0)
                        {
                            value = true;
                        }
                        else if (Array.IndexOf(FalseString, vs.ToLower()) >= 0)
                        {
                            value = false;
                        }
                        else if (DAL.Debug)
                        {
                            DAL.WriteLog("无法把字符串{0}转为布尔型!", vs);
                        }
                    }
                }
            }
            else if (type == typeof(Guid))
            {
                if (!(value is Guid))
                {
                    if (value is Byte[])
                    {
                        value = new Guid((Byte[])value);
                    }
                    else if (value is String)
                    {
                        value = new Guid((String)value);
                    }
                }
            }

            //// 不影响脏数据的状态
            //var ds = entity.Dirtys;
            //Boolean? b = null;
            //if (ds.ContainsKey(name)) b = ds[name];

            //entity[name] = value == DBNull.Value ? null : value;

            // 如果值类型不一致,则备份原始值到扩展,解决数据库类型比实体类型大(如Int64到Int32)
            if (value == DBNull.Value)
            {
                entity[name] = null;
            }
            else
            {
                entity[name] = value;

                if (value?.GetType() != type && !EntityBase.CheckEqual(entity[name], value))
                {
                    var ext = entity as IExtend3;
                    ext[name] = value;
                }
            }

            //if (b != null)
            //    ds[name] = b.Value;
            //else
            //    ds.Remove(name);
        }
Пример #4
0
        void IEditableObject.EndEdit()
        {
            //Update();
            Save();

            _bak = null;
        }
Пример #5
0
        void IEditableObject.CancelEdit()
        {
            CopyFrom(_bak, false);

            _bak = null;
        }
Пример #6
0
 void IEditableObject.BeginEdit()
 {
     _bak = Clone() as EntityBase;
 }