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