Esempio n. 1
0
        /// <summary>
        /// 根据type和Key查询
        /// </summary>
        /// <param name="type"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public async Task <WorkflowResource> QueryByKey(string type, string key)
        {
            var dbInfo = await StoreInfoHelper.GetHashStoreInfo(_storeInfoResolveService, _hashGroupRepository, _hashGroupName, type, key);

            if (!dbInfo.TableNames.TryGetValue(HashEntityNames.WorkflowResource, out string tableName))
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.NotFoundKeyInHashNodeKeyInfo,
                    DefaultFormatting = "哈希组{0}中的哈希节点关键信息中找不到键值{1}",
                    ReplaceParameters = new List <object>()
                    {
                        _hashGroupName, HashEntityNames.WorkflowResource
                    }
                };

                throw new UtilityException((int)Errors.NotFoundKeyInHashNodeKeyInfo, fragment);
            }

            WorkflowResource result = null;
            await DBTransactionHelper.SqlTransactionWorkAsync(DBTypes.SqlServer, true, false, dbInfo.DBConnectionNames.Read, async (conn, transaction) =>
            {
                SqlTransaction sqlTran = null;
                if (transaction != null)
                {
                    sqlTran = (SqlTransaction)transaction;
                }

                await using (var command = new SqlCommand()
                {
                    Connection = (SqlConnection)conn,
                    CommandType = CommandType.Text,
                    Transaction = sqlTran,
                    CommandText = string.Format(@"SELECT {0}
                                                  FROM {1}
                                                  WHERE [type] = @type
                                                        AND [key] = @key
                                                  ORDER BY createtime DESC ", StoreHelper.GetWorkflowResourceStoreSelectFields(string.Empty),
                                                tableName)
                })
                {
                    var parameter = new SqlParameter("@type", SqlDbType.NVarChar, 256)
                    {
                        Value = type
                    };
                    command.Parameters.Add(parameter);

                    parameter = new SqlParameter("@key", SqlDbType.NVarChar, 256)
                    {
                        Value = key
                    };
                    command.Parameters.Add(parameter);

                    await command.PrepareAsync();

                    SqlDataReader reader = null;

                    await using (reader = await command.ExecuteReaderAsync())
                    {
                        if (await reader.ReadAsync())
                        {
                            result = new WorkflowResource();
                            StoreHelper.SetWorkflowResourceStoreSelectFields(result, reader, string.Empty);
                        }

                        reader.Close();
                    }
                }
            });

            return(result);
        }