Esempio n. 1
0
        private Entity(object data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data不能为null");
            }

            Id = RepoHelper.GetIdValue(data);
            if (Id == null)
            {
                throw new ArgumentNullException("实体必须有一个名为Id的主键属性,不区分大小写");
            }

            Data     = data;
            DataType = data.GetType();
        }
Esempio n. 2
0
        internal TreeNode(Tree <T> tree, T data)
        {
            if (data == null)
            {
                throw new ArgumentNullException();
            }

            _tree = tree;

            Id   = RepoHelper.GetIdValue(data);
            Link = new NodeLink()
            {
                DataId = Id
            };
            Data = data;
        }
Esempio n. 3
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);
            }
        }