Ejemplo n.º 1
0
        /// <summary>
        /// RegistUpdate方法会把被保存对象DeepClone一份记录下来,当被保存的对象与其他对象关联太深时,
        /// 不可能把一整块关联对象都保存起来,这就需要产生一个值对象(DTO)来进行保存,这时,业务对象与
        /// 最终被保存的对象不一致,所以需要一个RegistUpdate+(更改过程)+Update两个方法来记录变更过程
        /// (为了做到这更新部分字段), 如果业务对象与最终被保存对象一致的情况,两个方法的效果一样的,
        /// 只需要在更新前执行Update方法。
        /// 例如:TreeNode对象,里面包含了Tree,如果直接保存TreeNode对象,会连整个Tree都被保存了。
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="errList"></param>
        private void Update(object obj, List <string> errList = null)
        {
            if (obj == null)
            {
                return;
            }

            if (!CheckIsValid(obj, errList))
            {
                return;
            }

            var val = _tranObjects.GetById(RepoHelper.GetIdValue(obj), obj.GetType());

            if (val == null)
            {
                var entity = Entity.CreateUpdateEntity(obj);
                _tranObjects.Add(entity);
            }
            else
            {
                val.UpdateData(obj);
            }
        }