示例#1
0
        public void UpdateValues <T, TKey>(List <T> getExistLists, List <T> getNowLists, Func <T, TKey> getCompareKey,
                                           Func <T, T, bool> getKey) where T : EntityBase
        {
            var entityDiff = new EntityDiff <T, TKey>(getExistLists, getNowLists, getCompareKey);

            entityDiff.DeletedEntities.ForEach(p => UpdateEntityState(p, EntityState.Deleted));
            getExistLists.AddRange(entityDiff.AddedEntities);
            foreach (var modEntity in entityDiff.ModifiedEntities)
            {
                var oldEntity = getExistLists.Where(p => getKey(modEntity, p)).FirstOrDefault();
                UpdateEntityValues(oldEntity, modEntity);
            }
        }
示例#2
0
        /// <summary>
        /// 更新1对多关系的实体值
        /// </summary>
        ///<param name="existEntity">数据库存在的实体</param>
        ///<param name="nowEntity">当前存在的实体</param>
        ///<param name="getChilds">获取1对多关系的实体回调</param>
        ///<param name="getCompareKey">实体差异比较条件回调</param>
        ///<param name="getKey">实体更新获取数据库实体的条件回调</param>
        /// <returns>VOID/returns>
        public void UpdateValues <T, T1, TKey>(T existEntity, T nowEntity, Func <T, List <T1> > getChilds,
                                               Func <T1, TKey> getCompareKey, Func <T1, T1, bool> getKey) where T : EntityBase where T1 : EntityBase
        {
            UpdateEntityValues(existEntity, nowEntity);
            var entityDiff = new EntityDiff <T1, TKey>(getChilds(existEntity), getChilds(nowEntity), getCompareKey);

            entityDiff.DeletedEntities.ForEach(p => UpdateEntityState(p, EntityState.Deleted));
            getChilds(existEntity).AddRange(entityDiff.AddedEntities);
            foreach (var modEntity in entityDiff.ModifiedEntities)
            {
                var oldEntity = getChilds(existEntity).Where(p => getKey(modEntity, p)).FirstOrDefault();
                UpdateEntityValues(oldEntity, modEntity);
            }
        }
示例#3
0
        /// <summary>
        /// </summary>
        /// <returns></returns>
        public void UpdateNodeValues <T, TKey>(T existNode, T nowNode, Func <T, List <T> > getChilds, Func <T, TKey> getCompareKey,
                                               Func <T, T, bool> getEntityKey, Func <T, T> getNewNode, Action <T, T> getConfig) where T : EntityBase
        {
            UpdateEntityValues(existNode, nowNode);
            var entityDiff = new EntityDiff <T, TKey>(getChilds(existNode), getChilds(nowNode), getCompareKey);

            //删除
            entityDiff.DeletedEntities.ForEach(node => DeleteNode(node, getChilds));
            //新增
            entityDiff.AddedEntities.ForEach(node =>
            {
                var newChildNode = getNewNode(existNode);
                // getConfig(newChildNode, node);
                InsertEntity(newChildNode);
                getChilds(existNode).Add(newChildNode);
                AddNodeValues(newChildNode, node, getChilds, getNewNode, getConfig);
            });
            //更新
            entityDiff.ModifiedEntities.ForEach(modNode =>
            {
                var existEntity = getChilds(existNode).Where(n => getEntityKey(modNode, n)).FirstOrDefault();
                UpdateNodeValues(existEntity, modNode, getChilds, getCompareKey, getEntityKey, getNewNode, getConfig);
            });
        }