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