/// <summary> /// 实体操作 /// </summary> /// <param name="EntityMap"></param> public void ProcessEntityPostRequest <Entity>(Bzure.Common.Data.EntityPostRequest EntityMap) where Entity : IEntity, IPersistenceState { Dictionary <string, MemberDataMap> MapSet = new Dictionary <string, MemberDataMap>(); lock (DataMapContainer) { Dictionary <string, MemberDataMap> MapSetTemp; if (DataMapContainer.TryGetValue(typeof(Entity), out MapSetTemp)) { foreach (KeyValuePair <string, MemberDataMap> kvp in MapSetTemp) { MapSet[kvp.Key] = kvp.Value.Copy(); } } else { throw new Exception(string.Format("类型:{0}没有在构建静态构造中初始化实体{1}的数据映射", this.GetType().Name, typeof(Entity).Name)); } } switch (EntityMap.Method) { #region Update case Bzure.Common.Data.EntityPostRequest.EntityPostMethod.Update: //要更新的字段 List <IDataMemberMap> FieldDataMemberMapList = new List <IDataMemberMap>(); foreach (EntityMemberMap map in EntityMap.FieldMap) { MemberDataMap MemberDataMap; if (MapSet.TryGetValue(map.MemberName, out MemberDataMap)) { FieldDataMemberMapList.AppendMember(MemberDataMap, map); } } //更新的条件 List <IDataMemberMap> ConditionDataMemberMapList = new List <IDataMemberMap>(); foreach (IEntityMemberMap map in EntityMap.ConditionMap) { if (map is EntityMemberMap) { EntityMemberMap EntityMemberMap = map as EntityMemberMap; MemberDataMap MemberDataMap; if (MapSet.TryGetValue(EntityMemberMap.MemberName, out MemberDataMap)) { ConditionDataMemberMapList.AppendMember(MemberDataMap, EntityMemberMap); } } else if (map is LogicLinkMap) { ConditionDataMemberMapList.Add(map as LogicLinkMap); } } StringBuilder updateSql = new StringBuilder(); updateSql.AppendFormat(UpdateSqlTemplate, this.TableName, BuildUpdateSqlSub(FieldDataMemberMapList), BuildConditonSqlSub(ConditionDataMemberMapList)); EntityMap <Entity> updateHandler = this.CreateEntityMap <Entity>(updateSql.ToString()); //添加字段参数 foreach (DataMemberMap DataMemberMap in FieldDataMemberMapList.Where(m => (m is DataMemberMap))) { updateHandler.AddParameter(DataMemberMap); } //添加条件参数 foreach (DataMemberMap DataMemberMap in ConditionDataMemberMapList.Where(m => (m is DataMemberMap))) { updateHandler.AddParameter(DataMemberMap); } updateHandler.AsNonQuery(); if (EntityMap.Entity is IPersistenceState) { IPersistenceState persistenceObject = EntityMap.Entity as IPersistenceState; persistenceObject.MarkPersistenceState(true); } if (EntityMap.Entity is ILastUpdate) { ILastUpdate lastUpdateObject = EntityMap.Entity as ILastUpdate; lastUpdateObject.LastTime = DateTime.Now; } break; #endregion #region Delete case Bzure.Common.Data.EntityPostRequest.EntityPostMethod.Delete: //删除的条件 List <IDataMemberMap> ConditionDataMemberMapListForDelete = new List <IDataMemberMap>(); foreach (IEntityMemberMap map in EntityMap.ConditionMap) { if (map is EntityMemberMap) { EntityMemberMap EntityMemberMap = map as EntityMemberMap; MemberDataMap MemberDataMap; if (MapSet.TryGetValue(EntityMemberMap.MemberName, out MemberDataMap)) { ConditionDataMemberMapListForDelete.AppendMember(MemberDataMap, EntityMemberMap); } } else if (map is LogicLinkMap) { ConditionDataMemberMapListForDelete.Add(map as LogicLinkMap); } } StringBuilder deleteSql = new StringBuilder(); deleteSql.AppendFormat(DeleteSqlTemplate, this.TableName, BuildConditonSqlSub(ConditionDataMemberMapListForDelete)); EntityMap <Entity> deleteHandler = this.CreateEntityMap <Entity>(deleteSql.ToString()); //添加条件参数 foreach (DataMemberMap DataMemberMap in ConditionDataMemberMapListForDelete.Where(m => (m is DataMemberMap))) { deleteHandler.AddParameter(DataMemberMap); } deleteHandler.AsNonQuery(); if (EntityMap.Entity is IPersistenceState) { IPersistenceState persistenceObject = EntityMap.Entity as IPersistenceState; persistenceObject.MarkPersistenceState(false); } break; #endregion #region Create case Bzure.Common.Data.EntityPostRequest.EntityPostMethod.Create: //添加的字段 List <IDataMemberMap> FieldDataMemberMapListForInsert = new List <IDataMemberMap>(); foreach (EntityMemberMap map in EntityMap.FieldMap) { MemberDataMap MemberDataMap; if (MapSet.TryGetValue(map.MemberName, out MemberDataMap)) { FieldDataMemberMapListForInsert.AppendMember(MemberDataMap, map); } } StringBuilder insertSql = new StringBuilder(); insertSql.AppendFormat(InsertSqlTemplate, this.TableName, BuildInsertSqlSub(FieldDataMemberMapListForInsert)); EntityMap <Entity> insertHandler = this.CreateEntityMap <Entity>(insertSql.ToString()); //添加字段参数 foreach (DataMemberMap DataMemberMap in FieldDataMemberMapListForInsert.Where(m => (m is DataMemberMap))) { insertHandler.AddParameter(DataMemberMap); } insertHandler.AsNonQuery(); if (EntityMap.Entity is IPersistenceState) { IPersistenceState persistenceObject = EntityMap.Entity as IPersistenceState; persistenceObject.MarkPersistenceState(true); } if (EntityMap.Entity is ILastUpdate) { ILastUpdate lastUpdateObject = EntityMap.Entity as ILastUpdate; lastUpdateObject.LastTime = DateTime.Now; } if (EntityMap.Entity is ICreateTime) { ICreateTime createTimeObject = EntityMap.Entity as ICreateTime; createTimeObject.CreateTime = DateTime.Now; } break; #endregion } }
public static IPersistenceState MarkPersistenceState(this IPersistenceState entity, bool IsPersisted) { entity.MarkPersistenceState(IsPersisted); return(entity); }