示例#1
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));
        }
示例#2
0
        /// <summary>
        /// 根据容器ID,成员ID和时间点载入对象
        /// </summary>
        /// <param name="containerID">容器ID</param>
        /// <param name="memberID">成员ID</param>
        /// <param name="timePoint"></param>
        /// <returns></returns>
        public DESimpleRelationBase Load(string containerID, string memberID, DateTime timePoint)
        {
            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("ContainerID", containerID);
            builder.AppendItem("MemberID", memberID);

            DEMemberRelationCollection relations = Load(builder, timePoint);

            return(relations.FirstOrDefault());
        }
示例#3
0
        /// <summary>
        /// 根据条件和时间点载入对象
        /// </summary>
        /// <param name="builder">包含条件的<see cref="IConnectiveSqlClause"/></param>
        /// <param name="timePoint"></param>
        /// <returns></returns>
        public DEMemberRelationCollection Load(IConnectiveSqlClause builder, DateTime timePoint)
        {
            var timeBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(builder, timeBuilder);

            DEMemberRelationCollection result = null;

            VersionedObjectAdapterHelper.Instance.FillData(GetMappingInfo().TableName, connectiveBuilder, this.GetConnectionName(),
                                                           view =>
            {
                result = new DEMemberRelationCollection();

                result.LoadFromDataView(view);
            });

            return(result);
        }
示例#4
0
        protected override void PrepareData(DESchemaObjectOperationContext context)
        {
            if (this.Data.ID.IsNullOrEmpty())
            {
                this.Data.ID = Guid.NewGuid().ToString();
            }


            Members.ForEach(p =>
            {
                if (p.ID.IsNullOrEmpty())
                {
                    p.ID = Guid.NewGuid().ToString();
                }
            });

            this._Relation = this.PrepareRelationObject(this.Data, this.Members);

            base.PrepareData(context);
        }
示例#5
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);
        }