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(); }
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; }
/// <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); } }