示例#1
0
        /// <inheritdoc />
        public async Task DeleteState(Guid flowID)
        {
            await SqlRetryHelper.Execute(async() =>
            {
                using (var connection = await GetConnection())
                {
                    var query = new SqlCommand($"delete from {tableName} where FlowID = @FlowID", connection);

                    var flowIDParam   = query.Parameters.Add("@FlowID", SqlDbType.UniqueIdentifier);
                    flowIDParam.Value = flowID;

                    await query.ExecuteNonQueryAsync();
                }
            });
        }
示例#2
0
        /// <inheritdoc />
        public async Task UpdateState <T>(Guid flowID, T state)
        {
            await SqlRetryHelper.Execute(async() =>
            {
                using (var connection = await GetConnection())
                {
                    var query = new SqlCommand($"update {tableName} set StateJson = @StateJson where FlowID = @FlowID", connection);

                    var flowIDParam    = query.Parameters.Add("@FlowID", SqlDbType.UniqueIdentifier);
                    var stateJsonParam = query.Parameters.Add("@StateJson", SqlDbType.NVarChar);

                    flowIDParam.Value    = flowID;
                    stateJsonParam.Value = JsonConvert.SerializeObject(state);

                    await query.ExecuteNonQueryAsync();
                }
            });
        }
示例#3
0
        /// <inheritdoc />
        public async Task CreateState <T>(Guid flowID, T state, DateTime timestamp)
        {
            await SqlRetryHelper.Execute(async() =>
            {
                using (var connection = await GetConnection())
                {
                    var query = new SqlCommand($"insert into {tableName} (FlowID, StateJson, CreationTime)" +
                                               "values (@FlowID, @StateJson, @CreationTime)",
                                               connection);

                    var flowIDParam       = query.Parameters.Add("@FlowID", SqlDbType.UniqueIdentifier);
                    var stateJsonParam    = query.Parameters.Add("@StateJson", SqlDbType.NVarChar);
                    var creationTimeParam = query.Parameters.Add("@CreationTime", SqlDbType.DateTime2);

                    flowIDParam.Value       = flowID;
                    stateJsonParam.Value    = JsonConvert.SerializeObject(state);
                    creationTimeParam.Value = timestamp;

                    await query.ExecuteNonQueryAsync();
                }
            });
        }
示例#4
0
        /// <inheritdoc />
        public async Task <List <KeyValuePair <Guid, T> > > GetStates <T>()
        {
            return(await SqlRetryHelper.Execute(async() =>
            {
                using (var connection = await GetConnection())
                {
                    var flowQuery = new SqlCommand($"select FlowID, StateJson from {tableName}", connection);
                    var flowReader = await flowQuery.ExecuteReaderAsync();

                    var result = new List <KeyValuePair <Guid, T> >();

                    while (await flowReader.ReadAsync())
                    {
                        var flowID = flowReader.GetGuid(0);
                        var stateJson = flowReader.GetString(1);

                        var state = JsonConvert.DeserializeObject <T>(stateJson);
                        result.Add(new KeyValuePair <Guid, T>(flowID, state));
                    }

                    return result;
                }
            }));
        }