/// <summary> /// 为实体元数据备用关键字的关联关系赋值 /// </summary> /// <param name="queue"></param> /// <param name="reader"></param> /// <param name="prefix"></param> public static void SetEntityInfoAlternateKeyRelationSelectFields(EntityInfoAlternateKeyRelation metadata, DbDataReader reader, string prefix) { metadata.ID = (Guid)reader[string.Format("{0}id", prefix)]; if (reader[string.Format("{0}entityinfoAlternatekeyid", prefix)] != DBNull.Value) { metadata.EntityInfoAlternateKeyId = (Guid)reader[string.Format("{0}entityinfoAlternatekeyid", prefix)]; } if (reader[string.Format("{0}entityattributeinfoid", prefix)] != DBNull.Value) { metadata.EntityAttributeInfoId = (Guid)reader[string.Format("{0}entityattributeinfoid", prefix)]; } if (reader[string.Format("{0}order", prefix)] != DBNull.Value) { metadata.Order = (int)reader[string.Format("{0}order", prefix)]; } if (reader[string.Format("{0}createtime", prefix)] != DBNull.Value) { metadata.CreateTime = (DateTime)reader[string.Format("{0}createtime", prefix)]; } if (reader[string.Format("{0}modifytime", prefix)] != DBNull.Value) { metadata.ModifyTime = (DateTime)reader[string.Format("{0}modifytime", prefix)]; } }
/// <summary> /// 根据实体元树备用关键字Id查询全部记录 /// </summary> /// <param name="alternateKeyId"></param> /// <param name="callback"></param> /// <returns></returns> public async Task QueryAllByAlternateKeyId(Guid alternateKeyId, Func <EntityInfoAlternateKeyRelation, Task> callback) { List <EntityInfoAlternateKeyRelation> itemList = new List <EntityInfoAlternateKeyRelation>(); await DBTransactionHelper.SqlTransactionWorkAsync(DBTypes.SqlServer, true, false, _entityMetadataConnectionFactory.CreateReadForEntityMetadata(), async (conn, transaction) => { int?sequence = null; int pageSize = 500; while (true) { itemList.Clear(); SqlTransaction sqlTran = null; if (transaction != null) { sqlTran = (SqlTransaction)transaction; } await using (SqlCommand commond = new SqlCommand() { Connection = (SqlConnection)conn, CommandType = CommandType.Text, Transaction = sqlTran }) { if (!sequence.HasValue) { commond.CommandText = string.Format(@"SELECT TOP (@pagesize) {0},{1},{2},{3} FROM [EntityInfoAlternateKeyRelation] AS relation INNER JOIN [EntityInfoAlternateKey] AS ekey ON relation.[entityinfoAlternatekeyid] = ekey.[id] INNER JOIN [EntityAttributeInfo] AS attribute ON relation.[entityattributeinfoid] = attribute.[id] INNER JOIN [EntityInfo] AS info ON attribute.[entityinfoid] = info.[id] WHERE ekey.[id] = @alternateKeyId ORDER BY relation.[order];", StoreHelper.GetEntityInfoAlternateKeyRelationSelectFields("relation"), StoreHelper.GetEntityInfoAlternateKeySelectFields("ekey"), StoreHelper.GetEntityAttributeInfoSelectFields("attribute"), StoreHelper.GetEntityInfoSelectFields("info")); } else { commond.CommandText = string.Format(@"SELECT TOP (@pagesize) {0},{1},{2},{3} FROM [EntityInfoAlternateKeyRelation] AS relation INNER JOIN [EntityInfoAlternateKey] AS ekey ON relation.[entityinfoAlternatekeyid] = ekey.[id] INNER JOIN [EntityAttributeInfo] AS attribute ON relation.[entityattributeinfoid] = attribute.[id] INNER JOIN [EntityInfo] AS info ON attribute.[entityinfoid] = info.[id] WHERE ekey.[id] = @alternateKeyId AND relation.[order] > @sequence ORDER BY relation.[order];", StoreHelper.GetEntityInfoAlternateKeyRelationSelectFields("relation"), StoreHelper.GetEntityInfoAlternateKeySelectFields("ekey"), StoreHelper.GetEntityAttributeInfoSelectFields("attribute"), StoreHelper.GetEntityInfoSelectFields("info")); } var parameter = new SqlParameter("@alternateKeyId", SqlDbType.UniqueIdentifier) { Value = alternateKeyId }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@pagesize", SqlDbType.Int) { Value = pageSize }; commond.Parameters.Add(parameter); if (sequence.HasValue) { parameter = new SqlParameter("@sequence", SqlDbType.BigInt) { Value = sequence }; commond.Parameters.Add(parameter); } await commond.PrepareAsync(); SqlDataReader reader = null; await using (reader = await commond.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { var item = new EntityInfoAlternateKeyRelation(); StoreHelper.SetEntityInfoAlternateKeyRelationSelectFields(item, reader, "relation"); sequence = (int)reader["relationorder"]; item.EntityInfoAlternateKey = new EntityInfoAlternateKey(); StoreHelper.SetEntityInfoAlternateKeySelectFields(item.EntityInfoAlternateKey, reader, "ekey"); item.EntityAttributeInfo = new EntityAttributeInfo(); StoreHelper.SetEntityAttributeInfoSelectFields(item.EntityAttributeInfo, reader, "attribute"); item.EntityAttributeInfo.EntityInfo = new EntityInfo(); StoreHelper.SetEntityInfoSelectFields(item.EntityAttributeInfo.EntityInfo, reader, "info"); itemList.Add(item); } await reader.CloseAsync(); } } foreach (var item in itemList) { await callback(item); } if (itemList.Count != pageSize) { break; } } }); }