Exemple #1
0
        /// <summary>
        /// 根据<see cref="IConnectiveSqlClause"/>指定的条件和时间点载入对象
        /// </summary>
        /// <param name="condition">表示条件的<see cref="IConnectiveSqlClause"/></param>
        /// <param name="timePoint">时间点 - 或 - <see cref="DateTime.MinValue"/>表示当前时间</param>
        /// <returns>一个<see cref="DESchemaObjectCollection"/>,包含条件指定的对象。</returns>
        public DESchemaObjectCollection Load(IConnectiveSqlClause condition, DateTime timePoint, bool loadNormalStatus = true)
        {
            var timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            DESchemaObjectCollection result = new DESchemaObjectCollection();

            if (condition.IsEmpty == false)
            {
                ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition, timePointBuilder);

                if (loadNormalStatus)
                {
                    WhereSqlClauseBuilder statusBuilder = new WhereSqlClauseBuilder();
                    statusBuilder.AppendItem("Status", (int)SchemaObjectStatus.Normal);
                    connectiveBuilder.Add(statusBuilder);
                }

                using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
                {
                    VersionedObjectAdapterHelper.Instance.FillData(GetMappingInfo().TableName, connectiveBuilder, this.GetConnectionName(),
                                                                   reader =>
                    {
                        result.LoadFromDataReader(reader);
                    });
                }
            }

            return(result);
        }
Exemple #2
0
        public DESchemaObjectCollection ToSchemaObjects()
        {
            DESchemaObjectCollection result = new DESchemaObjectCollection();

            this.ForEach(u => result.Add(u));

            return(result);
        }
        public static OuterEntityCollection FromSchemaObjects(DESchemaObjectCollection schemaObjectCollection)
        {
            schemaObjectCollection.NullCheck <ArgumentNullException>("schemaObjectCollection");

            var result = new OuterEntityCollection();

            schemaObjectCollection.ForEach(p => result.Add((OuterEntity)p));

            return(result);
        }
Exemple #4
0
        public void RelationAction(
            DEBase container,
            DESchemaObjectCollection members,
            DEMemberRelationCollection relation,
            bool saveTargetData,
            bool saveMemberData,
            DEStandardObjectSchemaType type
            )
        {
            //取出旧的关系集合
            var oldRelation = DEMemberRelationAdapter.Instance.LoadByContainerID(container.ID, type.ToString());

            //所有旧成员集合
            var oldMemberIDs = oldRelation.Select(p => p.ID).ToList();

            var newMemberIDs = members.Select(m => m.ID).ToList();

            List <string> needDelIDs = new List <string>();

            foreach (var id in oldMemberIDs)
            {
                if (!newMemberIDs.Contains(id))
                {
                    needDelIDs.Add(id);
                }
            }


            //删除关系
            oldRelation.ForEach(p =>
            {
                if (needDelIDs.Contains(p.ID))
                {
                    DEMemberRelationAdapter.Instance.UpdateStatus(p, SchemaObjectStatus.DeletedByContainer);
                }
            });

            if (saveTargetData)
            {
                //容器入库
                DESchemaObjectAdapter.Instance.Update(container);
            }

            if (saveMemberData)
            {
                //删除成员
                needDelIDs.ForEach(id => DESchemaObjectAdapter.Instance.UpdateStatus(DESchemaObjectAdapter.Instance.Load(id), SchemaObjectStatus.Deleted));
                //新成员入库
                members.ForEach(p => DESchemaObjectAdapter.Instance.Update(p));
            }

            //新关系入库

            relation.ForEach(p => DEMemberRelationAdapter.Instance.Update(p));
        }
Exemple #5
0
        public bool Exist(string id, DateTime timePoint)
        {
            id.NullCheck("id");

            InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("ID");

            inBuilder.AppendItem(id);

            DESchemaObjectCollection objs = Load(inBuilder, timePoint, false);

            return(objs.Any());
        }
Exemple #6
0
        public static DynamicEntityFieldCollection FromSchemaObjects(DESchemaObjectCollection schemaObjectCollection)
        {
            schemaObjectCollection.NullCheck <ArgumentNullException>("schemaObjectCollection");

            var temp = new DynamicEntityFieldCollection();

            schemaObjectCollection.ForEach(p => temp.Add((DynamicEntityField)p));

            var result = new DynamicEntityFieldCollection();

            result.CopyFrom(temp.OrderBy(p => p.SortNo));

            return(result);
        }
Exemple #7
0
        public DEMemberCollectionRelativeExecutorBase(DEOperationType opType, DEBase container, DESchemaObjectCollection members)
            : base(opType, container)
        {
            container.NullCheck("container");
            container.ClearRelativeData();

            members.NullCheck("members");
            members.ForEach(p => p.ClearRelativeData());

            this._Container = container;
            this._Members   = members;

            this.SaveMemberData = true;
        }
Exemple #8
0
        /// <summary>
        /// 根据ID和时间载入对象
        /// </summary>
        /// <param name="id">对象的ID</param>
        /// <param name="timePoint">表示时间点的<see cref="DateTime"/> 或 <see cref="DateTime.MinValue"/>表示当前时间</param>
        /// <returns><see cref="DESchemaObjectBase"/>的派生类型的实例</returns>
        public DESchemaObjectBase Load(string id, DateTime timePoint, bool loadNormalStatus = true)
        {
            id.NullCheck("id");

            InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("ID");

            inBuilder.AppendItem(id);

            DESchemaObjectCollection objs = Load(inBuilder, timePoint, loadNormalStatus);

            if (!objs.Any())
            {
                throw new Exception(string.Format("{0}不能找到ID为{1}的对象", (timePoint == DateTime.MinValue ? string.Empty : string.Format("在{0}时间下", timePoint.ToString("yyyy-MM-dd HH:mm:ss"))), id));
            }

            return(objs.Single());
        }
        /// <summary>
        /// 检查数据的状态
        /// </summary>
        /// <param name="objsToCheck"></param>
        protected void CheckObjectStatus(params DESchemaObjectBase[] objsToCheck)
        {
            List <DESchemaObjectBase> normalizedObjsToCheck = new List <DESchemaObjectBase>();

            //foreach (DESchemaObjectBase obj in objsToCheck)
            //{
            //    if (obj.ID != DEOrganization.RootOrganizationID)
            //        normalizedObjsToCheck.Add(obj);
            //}

            InSqlClauseBuilder idBuilder = new InSqlClauseBuilder("ID");

            normalizedObjsToCheck.ForEach(o => idBuilder.AppendItem(o.ID));

            if (idBuilder.IsEmpty == false)
            {
                DESchemaObjectCollection originalDataList = DESchemaObjectAdapter.Instance.Load(idBuilder);

                string opName = EnumItemDescriptionAttribute.GetDescription(this.OperationType);

                foreach (DESchemaObjectBase objToCheck in normalizedObjsToCheck)
                {
                    if (originalDataList.ContainsKey(objToCheck.ID) == false)
                    {
                        throw new DEStatusCheckException(string.Format("ID为\"{0}\"的对象不存在,不能执行{1}操作", objToCheck.ID, opName));
                    }

                    DESchemaObjectBase originalData = originalDataList[objToCheck.ID];

                    if (originalData.Status != SchemaObjectStatus.Normal)
                    {
                        throw new DEStatusCheckException(originalData, this.OperationType);
                    }
                }
            }
        }
Exemple #10
0
        private DEMemberRelationCollection PrepareRelationObject(DESchemaObjectBase container, DESchemaObjectCollection members)
        {
            var result = new DEMemberRelationCollection();

            members.ForEach(member =>
            {
                DESimpleRelationBase relation = DEMemberRelationAdapter.Instance.Load(container.ID, member.ID);

                if (relation == null)
                {
                    relation = CreateRelation(container, member, _RelationType);
                }
                else
                {
                    OverrideExistedRelation = true;
                }
                relation.Status = member.Status;
                result.Add(relation);
            });

            return(result);
        }
 public DEMemberCollectionRelativeExecutor(DEOperationType opType, DEBase container, DESchemaObjectCollection members, DEStandardObjectSchemaType relationType)
     : base(opType, container, members, relationType)
 {
 }